我有一个保存数据的字符串。我希望所有内容都在({和})之间
"({Simple Data})"
应该返回“简单数据”
发布于 2018-08-23 08:54:44
如果括号始终位于字符串的开头和结尾,则可以执行以下操作:
l = "({Simple Data})"
print(l[2:-2])
其结果是:
"Simple Data"
在Python中,您可以通过[]运算符访问单个字符。这样,您就可以访问从第三个字符(index = 2)到倒数第二个字符的字符序列(index = -2,序列中不包括倒数第二个字符)。
发布于 2018-08-23 08:56:13
或正则表达式:
s = '({Simple Data})'
print(re.search('\({([^})]+)', s).group(1))
输出:
'Simple Data'
发布于 2018-08-23 08:58:55
因此,我设计了一个旨在嵌套数据的标记器。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
https://stackoverflow.com/questions/51976939
复制相似问题