我在查找python中句子中字符串的位置时遇到了问题。我一直收到错误:不平衡的括号。
>>>sent="Of these the Murids (seekers or strugglers,) are formed"
>>>stringlist=sent.split()
>>>[[(m.start(0), m.end(0)) for m in re.finditer(s, sent)]for s in stringlist]
输出:
raise error, v # invalid expression
error: unbalanced parenthesis
它没有字符串; (寻求者或斗争者);输出:[[(0, 2)], [(3, 8)], [(3, 6), (9, 12)], [(13, 19)], [(45, 48)], [(49, 55)]]
我的问题是如何找到所有字符串的开头和结尾; ['Of', 'these', 'the', 'Murids', '(seekers', 'or', 'strugglers,)', 'are', 'formed']
包括带有不平衡括号的那个?
感谢您的建议。
答案 0 :(得分:2)
(
是正则表达式中的特殊字符。它标志着捕获组的开始。像这样)
标志着捕获组的结束。因此,(seekers
和strugglers,)
都不会构成有效的正则表达式(在split()
之后得到的正则表达式无效。
您应该转义(
和)
:
sent = "Of these the Murids \(seekers or strugglers,\) are formed"
现在您的代码输出:
[[(0, 2)], [(3, 8)], [(3, 6), (9, 12)], [(13, 19)], [(21, 29)],
[(30, 32), (52, 54)], [], [(47, 50)], [(51, 57)]]
另一个选择是使用re.escape
似乎确实会返回更好的结果:
import re
sent = "Of these the Murids (seekers or strugglers,) are formed"
stringlist = sent.split()
print([[(m.start(0), m.end(0)) for m in re.finditer(re.escape(s), sent)] for s in stringlist])
# [[(0, 2)], [(3, 8)], [(3, 6), (9, 12)], [(13, 19)], [(20, 28)],
# [(29, 31), (50, 52)], [(32, 44)], [(45, 48)], [(49, 55)]]
答案 1 :(得分:0)
()[] $ ^ \。 | {}是python正则表达式的特殊字符。
尝试在每个括号前加\,得到你想要的结果
您的输出将是:
[[(0, 2)], [(3, 8)], [(3, 6), (9, 12)], [(13, 19)],
[(21, 29)], [(30, 32), (52, 54)], [], [(47, 50)], [(51, 57)]]