Python Regex\pL 匹配问题

标签 python regex

我正在尝试匹配我拥有的关键字列表,注意包含所有拉丁字符(例如重音符号)。

这是一个例子

import regex as re
p = r'((?!\pL)|^)blah((?!\pL)|$)'
print(re.search(p, "blah u"))
print(re.search(p, "blahé u"))
print(re.search(p, "éblah u"))
print(re.search(p, "blahaha"))

给出:

<regex.Match object; span=(0, 4), match='blah'>
None
None
None

这看起来是正确的。但是:

print(re.search(p, "u blah"))

给出:

None

这是错误的,因为我期望匹配“u blah”。

我也尝试过使用 re 模块中内置的 Python,但我无法让它与 \pL\p{Latin} 由于“错误转义”错误。我还尝试过使用 unicode 字符串(不带“r”),但尽管向 \\\\pL 添加了斜杠,但我就是无法使其正常工作。

注意:我使用的是 Python 3.8

最佳答案

您的 ((?!\pL)|^)blah((?!\pL)|$) 正则表达式的问题在于 ((?!\pL)| ^) 组包含两个替代方案,其中第一个方案始终无法通过正则表达式(为什么?因为 (?!\pL) 是导致匹配失败的负向预测如果下一个字符是字母,并且下一个要匹配的字符是 blah 中的 b),并且只有 ^ 始终有效,即您的正则表达式等于 ^blah((?!\pL)|$) 并且仅匹配字符串的开头。

注意 (?!\pL) 已经匹配字符串末尾的位置,因此 ((?!\pL)|$) = ( ?!\pL).

你应该使用

(?<!\pL)blah(?!\pL)

请参阅regex demo (出于演示目的切换到 PCRE)。

请注意,正则表达式的re兼容版本是

(?<![^\W\d_])blah(?![^\W\d_])

请参阅regex demo .

关于Python Regex\pL 匹配问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68929921/

相关文章:

ruby - ruby 中可以匹配任何表情符号的正则表达式示例是什么?

javascript - 如何生成与JavaScript中的正则表达式匹配的所有可能的字符串

python - 通过类中特定对象的名称访问所有变量

python - tkFileDialog.askdirecotry 循环直到 'cancel' - tkinter python

python - Tkinter 将带参数的函数绑定(bind)到小部件

jquery - 密码应至少包含一个数字和一个字符

java - 使用 String.split 时转义逗号

regex - sed 多行搜索替换

python - 使用 $limit 和 $offset 在 SODA API 上获取超过 1,000 行

python - ElasticSearch超时错误:ReadTimeoutError(HTTPConnectionPool(host ='localhost',port = 9200):读取超时。(读取超时= 60))