import re
text = 'The quick. black n brown? fox jumps*over the lazy dog.'
print(re.split('; |, |\? |. ',text))
这给了我以下输出:
['Th', 'quick', 'brown', 'fo', 'jumps*ove', 'th', 'laz', 'dog.']
但我希望将该字符串拆分为
['The quick.', 'black n brown?', 'fox jumps*over the lazy dog.']
答案 0 :(得分:1)
如果我了解您的需求,则您的正则表达式应该转义点:
print(re.split('; |, |\? |\. ',text)
答案 1 :(得分:0)
您可以在此处利用零宽度的正向外观:
re.split('(?<=[;,.?]) ',text)
(?<=[;,.?])
是零宽度正向后方,字面匹配;
,,
,.
,?
中的任何一个;然后是要匹配的空格示例:
In [1461]: text = 'The quick. black n brown? fox jumps*over the lazy dog.'
In [1462]: re.split(r'(?<=[;,.?]) ',text)
Out[1462]: ['The quick.', 'black n brown?', 'fox jumps*over the lazy dog.']
在尝试中,如果将.
(任何字符)替换为转义版本以得到.
,即\.
,则会使更接近所需的输出结果:
In [1463]: text = 'The quick. black n brown? fox jumps*over the lazy dog.'
In [1464]: re.split(r'; |, |\? |. ',text)
Out[1464]: ['Th', 'quick', 'blac', '', 'brown', 'fo', 'jumps*ove', 'th', 'laz', 'dog.']
In [1465]: re.split(r'; |, |\? |\. ',text)
Out[1465]: ['The quick', 'black n brown', 'fox jumps*over the lazy dog.']
由于所有模式都有单个字符,后跟一个空格,因此可以使用字符类使模式更紧凑:
In [1466]: re.split(r'[;,?.] ',text)
Out[1466]: ['The quick', 'black n brown', 'fox jumps*over the lazy dog.']
您不需要在字符类[]
中转义正则表达式令牌。
此外,通过使用r
将模式字符串括起来,使正则表达式模式原始。