【发布时间】:2018-10-13 00:05:38
【问题描述】:
我想在拉丁文本上应用正则表达式,我遵循了这个问题中的解决方案:How to account for accent characters for regex in Python?,他们建议在正则表达式之前添加一个 # 字符。
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”,在“DOT”之前带有空格并删除标签“@aaa”。
但它产生相同的输入文本!:“@aaa bbb các.ddd”
我错过了什么吗?
【问题讨论】:
-
在您链接到的那个问题中,答案不是添加
#(这里有@),而是他们使用\w和re.U标志来制作\wUnicode知道的。你不能仅仅因为你添加了一些标志就指望[A-Za-z]匹配ł。将您的#[a-zA-Z_0-9]+替换为@\w+ -
您如何确保正则表达式能够检测拉丁字符?
-
@WiktorStribiżew ,它有效! ..
-
添加到@WiktorStribiżew 的精彩回复中,
\w匹配[a-zA-Z0-9_](以及带有U标志的其他变体)。要让\w与_不匹配,您可以使用[^\W_]。同样,要仅匹配[a-zA-Z]及其 Unicode 变体(无数字),您可以使用[^\W_\d] -
@revo ,你可以测试一下,它可以工作