如何将句子分成正则表达式的单词?

时间:2018-02-12 18:24:50

标签: python regex

“她真好!” - > [ “她”, “'”, “S”, “所以”, “好”, “!”] 我想要像这样分开句子! 所以我写了代码,但它包括空格! 如何仅使用正则表达式创建代码?

        words = re.findall('\W+|\w+')

- > [“她”,“'”,“s”,“”,“so”,“”,“很好”,“!”]

        words = [word for word in words if not word.isspace()]

2 个答案:

答案 0 :(得分:2)

正则表达式[A-Za-z]+|[^A-Za-z ]

[^A-Za-z ]添加字符中,您不想匹配。

详细说明:

  • []匹配列表中的单个字符
  • [^]匹配列表中的单个字符 NOT
  • +匹配一次且无限次
  • |

Python代码

text = "She's so nice!"
matches = re.findall(r'[A-Za-z]+|[^A-Za-z ]', text)

输出:

['She', "'", 's', 'so', 'nice', '!']

Code demo

答案 1 :(得分:0)

Python的re模块不允许您拆分零宽度断言。您可以使用python的pypi regex package代替(确保指定使用版本1,它正确处理零宽度匹配)。

See code in use here

import regex

s = "She's so nice!"
x = regex.split(r"\s+|\b(?!^|$)", s, flags=regex.VERSION1)

print(x)

输出:['She', "'", 's', 'so', 'nice', '!']

  • \s+|\b(?!^|$)匹配以下任一选项
    • \s+匹配一个或多个空白字符
    • \b(?!^|$)断言位置为字边界,但不在行的开头或结尾