Jür*_* K. 6 regex string split tokenize
我有以下文字:
I don't like to eat Cici's food (it is true)
我需要将它标记为
['i', 'don't', 'like', 'to', 'eat', 'Cici's', 'food', '(', 'it', 'is', 'true', ')']
我发现以下正则表达式(['()\w]+|\.)拆分如下:
['i', 'don't', 'like', 'to', 'eat', 'Cici's', 'food', '(it', 'is', 'true)']
如何从令牌中取出括号并使其成为自己的令牌?
谢谢你的想法。
当您想使用对上下文有特殊限制的正则表达式标记字符串时,您可以使用匹配方法,该方法通常会产生更清晰的输出(尤其是当涉及到结果列表中的空元素时)。
任何单词字符都与 匹配,\w任何非单词字符都与 匹配\W。如果要将字符串标记为单词和非单词字符,可以使用\w+|\W+正则表达式。但是,在您的情况下,您希望匹配后跟可选的单词字符块,'后跟 1+ 个单词字符,以及任何其他非空格的单个字符。
用
re.findall(r"\w+(?:'\w+)?|[^\w\s]", s)
Run Code Online (Sandbox Code Playgroud)
在这里,\w+(?:'\w+)?匹配像peopleor之类的单词people's,并[^\w\s]匹配单词和空白字符以外的单个字符。
查看正则表达式演示
import re
rx = r"\w+(?:'\w+)?|[^\w\s]"
s = "I don't like to eat Cici's food (it is true)"
print(re.findall(rx, s))
Run Code Online (Sandbox Code Playgroud)
另一个使用(and标记化的示例):
[^()\s]+|[()]
Run Code Online (Sandbox Code Playgroud)
查看正则表达式演示
此处,[^()\s]+匹配(,)和空格以外的 1 个或多个符号,并[()]匹配(或)。