首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Regex Python查找四个字符之间的所有内容

Regex Python查找四个字符之间的所有内容
EN

Stack Overflow用户
提问于 2018-08-23 08:48:34
回答 5查看 65关注 0票数 0

我有一个保存数据的字符串。我希望所有内容都在({和})之间

代码语言:javascript
复制
"({Simple Data})"

应该返回“简单数据”

EN

回答 5

Stack Overflow用户

发布于 2018-08-23 08:54:44

如果括号始终位于字符串的开头和结尾,则可以执行以下操作:

代码语言:javascript
复制
l = "({Simple Data})"
print(l[2:-2])

其结果是:

代码语言:javascript
复制
"Simple Data"

在Python中,您可以通过[]运算符访问单个字符。这样,您就可以访问从第三个字符(index = 2)到倒数第二个字符的字符序列(index = -2,序列中不包括倒数第二个字符)。

票数 0
EN

Stack Overflow用户

发布于 2018-08-23 08:56:13

或正则表达式:

代码语言:javascript
复制
s = '({Simple Data})'
print(re.search('\({([^})]+)', s).group(1))

输出:

代码语言:javascript
复制
'Simple Data'
票数 0
EN

Stack Overflow用户

发布于 2018-08-23 08:58:55

因此,我设计了一个旨在嵌套数据的标记器。OP应该检查一下here

代码语言:javascript
复制
import collections
import re

Token = collections.namedtuple('Token', ['typ', 'value', 'line', 'column'])

def tokenize(code):
    token_specification = [
        ('DATA',        r'[ \t]*[\w]+[\w \t]*'),
        ('SKIP',        r'[ \t\f\v]+'),
        ('NEWLINE',     r'\n|\r\n'),
        ('BOUND_L',     r'\(\{'),
        ('BOUND_R',     r'\}\)'),
        ('MISMATCH',    r'.'),
    ]
    tok_regex = '|'.join('(?P<%s>%s)' % pair for pair in token_specification)
    line_num = 1
    line_start = 0
    lines = code.splitlines()
    for mo in re.finditer(tok_regex, code):
        kind = mo.lastgroup
        value = mo.group(kind)
        if kind == 'NEWLINE':
            line_start = mo.end()
            line_num += 1
        elif kind == 'SKIP':
            pass
        else:
            column = mo.start() - line_start
            yield Token(kind, value, line_num, column)

statements = '''
    ({Simple Data})
    ({
        Parent Data Prefix
        ({Nested Data (Yes)})
        Parent Data Suffix
    })
'''

queue = collections.deque()

for token in tokenize(statements):
    if token.typ == 'DATA' or token.typ == 'MISMATCH':
        queue.append(token.value)
    elif token.typ == 'BOUND_L' or token.typ == 'BOUND_R':
        print(''.join(queue))
        queue.clear()

此代码的输出应为:

代码语言:javascript
复制
Simple Data
    Parent Data Prefix
Nested Data (Yes)
    Parent Data Suffix
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51976939

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档