我想在拉丁文本上应用正则表达式,并按照此问题中的解决方案进行操作:如何处理Python中正则表达式的重音字符?,他们建议在正则表达式前添加#字符。请注意保留HTML标记。
我的问题是,正则表达式可以检测到拉丁字符,但是没有从正则表达式集中应用任何内容到文本上。
例如:如果我有一个文本像“@aaa bbb các. ddd”。
它应该是“bbb các . ddd”,带有点“前面的”空格,并删除标签“@aaa”。
但它产生了相同的输入文本:“@aaa bbb các. ddd”。
我错过了什么吗?
def clean_str(string):
string = re.sub(r"#(@[a-zA-Z_0-9]+)", " ", string, re.UNICODE)
string = re.sub(r'#([^a-zA-Z0-9#])', r' \1 ', string, re.UNICODE)
string = re.sub(r'#([^a-zA-Z0-9#])', r' ', string, re.UNICODE)
string = re.sub(r'(\s{2,})', ' ', string, re.UNICODE)
return string.lower().strip()
我的问题是,正则表达式可以检测到拉丁字符,但是没有从正则表达式集中应用任何内容到文本上。
例如:如果我有一个文本像“@aaa bbb các. ddd”。
它应该是“bbb các . ddd”,带有点“前面的”空格,并删除标签“@aaa”。
但它产生了相同的输入文本:“@aaa bbb các. ddd”。
我错过了什么吗?
#
(这里使用的是@
),而是他们使用了\w
和re.U
标志来使\w
具有 Unicode 功能。你不能仅仅因为添加了一些标志就期望[A-Za-z]
能够匹配ł
。请将你的#[a-zA-Z_0-9]+
替换为@\w+
。 - Wiktor Stribiżew\w
匹配[a-zA-Z0-9_]
(以及带有U
标志的其他变体)。要使\w
不匹配_
,您可以使用[^\W_]
。同样,要仅匹配[a-zA-Z]
及其Unicode变体(不包括数字),可以使用[^\W_\d]
。 - ctwheels[^\w\s]
进行匹配。 - Wiktor Stribiżew