我需要从英语和其他unicode字母组合的文本中找到正则表达式。你知道吗
问题是-混合语言的单词边界不正确:
text: הmאפrקt boom sam
regex: m\b
also tried: m(?=\W)
期望结果:只捕获“boom”和“sam”中的“m”,而不是第一个单词中的“m”。你知道吗
但实际上,“m\b”正则表达式匹配文本中的所有“m”字母。这是错误的(在我看来),因为第一个“m”在一个词的中间。你知道吗
我成功地使用了这样一个丑陋的前瞻,这是一个有效的解决方案:
(?=$|[^a-zא-ת])
意思:它要么寻找句子的结尾,要么寻找任何其他非英语的非希伯来语字母,但不使用它。你知道吗
但这并不是一个完整的解决方案:它不处理音调符号,或其他语言中的其他字母
有没有更优雅的方法来处理python2正则表达式中混合的多语言单词边界?你知道吗
我的代码示例:
text = ur"הmאפrקt boom sam"
result = re.sub(ur'm\b', 'X', text, flags=re.I+re.M+re.S)
result is: "הXאפrקt booX saX"
should be: "הmאפrקt booX saX"
解决方案
感谢viktor的回答;前提是所有字符串都是unicode:
text = re.sub(oldtext, replacement, text, flags=re.UNICODE)
您需要编译带有
re.UNICODE
标志的正则表达式,以使\b
能够识别Unicode。另外,请记住,您使用的所有字符串都必须是Unicode。你知道吗以下是如何修复替换代码:
参见online Python 2 demo。你知道吗
下面是一个匹配的片段:
一个
re.findall
的例子证明只有一个匹配:参见Python 2 online demo。你知道吗
相关问题 更多 >
编程相关推荐