我需要标记以下文字:
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)']
如何从令牌中取出括号并将其设为自己的令牌?
感谢您的想法。
答案 0 :(得分:2)
如果要使用对上下文有特殊限制的正则表达式对字符串进行标记,则可以使用通常产生更清晰输出的匹配方法(特别是在结果列表中出现空元素时)。
任何单词字符都与\W
匹配,任何非单词字符都与\w+|\W+
匹配。如果您想将字符串标记为单词和非单词字符,则可以使用'
正则表达式。但是,在您的情况下,您希望匹配可选地后跟re.findall(r"\w+(?:'\w+)?|[^\w\s]", s)
的单词字符块,后跟1个单词字符,以及任何其他不是空格的单个字符。
使用
\w+(?:'\w+)?
此处people
匹配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))
匹配单词和空白字符以外的单个字符。
请参阅regex demo
(
使用)
和[^()\s]+|[()]
进行令牌化的另一个示例:
[^()\s]+
请参阅regex demo
此处,(
匹配)
,[()]
和空白以外的1个或多个符号,(
匹配)
或class User extends Model
{
protected $appends = ['extra'];
public function getExtraAttribute()
{
return $this->attributes['extra'] == 'some string...';
}
}
答案 1 :(得分:0)