分隔符在正则表达式拆分方法中无法正常工作

时间:2019-03-22 14:54:18

标签: python regex

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.']

2 个答案:

答案 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将模式字符串括起来,使正则表达式模式原始。