正则表达式Python查找四个字符之间的所有内容

时间:2018-08-23 00:48:34

标签: python regex string

我有一个保存数据的字符串。我希望一切都在({和})

之间
"({Simple Data})"

应返回“简单数据”

5 个答案:

答案 0 :(得分:0)

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

l = "({Simple Data})"
print(l[2:-2])

吸引人的地方:

"Simple Data"

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

答案 1 :(得分:0)

或正则表达式:

s = '({Simple Data})'
print(re.search('\({([^})]+)', s).group(1))

输出:

'Simple Data'

答案 2 :(得分:0)

在这里,我设计了一个针对嵌套数据的令牌生成器。 OP应该检出here

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()

此代码的输出应为:

Simple Data
    Parent Data Prefix
Nested Data (Yes)
    Parent Data Suffix

答案 3 :(得分:0)

您可以尝试以下操作:

^\({(.*)}\)$

第1组将包含Simple Data

查看example on regexr

答案 4 :(得分:0)

您可以尝试此正则表达式(?s)\(\{(.*?)\}\)
它只是捕获定界符之间的内容。

请注意,这并不说明嵌套。

如果您担心嵌套,那么最好使用标准的Python re引擎
是使用此正则表达式仅获取内部嵌套:

\(\{((?:(?!\(\{|\}\).)*)\}\)