gpt4 book ai didi

Python 正则表达式\pL 匹配问题

转载 作者:行者123 更新时间:2023-12-04 07:13:23 24 4
gpt4 key购买 nike

我正在尝试匹配我拥有的关键字列表,注意包括所有拉丁字符(例如重音)。
这是一个例子

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}由于“bad-escape”错误。我也尝试过使用 unicode 字符串(不带“r”),但尽管在 \\\\pL 中添加了斜杠,我就是无法让它正常工作。
注意:我使用的是 Python 3.8

最佳答案

您的 ((?!\pL)|^)blah((?!\pL)|$) 的问题正则表达式是 ((?!\pL)|^) group 包含两个替代方案,其中第一个总是使正则表达式失败(为什么?因为 (?!\pL) 是一个负前瞻,如果下一个字符是字母,则匹配失败,而要匹配的下一个字符是 b 中的 blah )并且只有 ^一直有效,即您的正则表达式等于 ^blah((?!\pL)|$)并且只匹配字符串的开头。
备注 (?!\pL)已经匹配字符串末尾的位置,所以 ((?!\pL)|$) = (?!\pL) .
你应该使用

(?<!\pL)blah(?!\pL)
regex demo (出于演示目的切换到 PCRE)。
请注意 re - 正则表达式的兼容版本是
(?<![^\W\d_])blah(?![^\W\d_])
regex demo .

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

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com