gpt4 book ai didi

Python 正则表达式单词边界出现意外结果

转载 作者:太空宇宙 更新时间:2023-11-03 16:05:21 27 4
gpt4 key购买 nike

import re
sstring = "ON Any ON Any"
regex1 = re.compile(r''' \bON\bANY\b''', re.VERBOSE)
regex2 = re.compile(r'''\b(ON)?\b(Any)?''', re.VERBOSE)
regex3 = re.compile(r'''\b(?:ON)?\b(?:Any)?''', re.VERBOSE)
for a in regex1.findall(sstring): print(a)
print("----------")
for a in regex2.findall(sstring): print(a)
print("----------")
for a in regex3.findall(sstring): print(a)
print("----------")

('ON', '') ('', '') ('', 'Any') ('', '') ('ON', '') ('', '') ('', 'Any')

('', '')

ON

Any

ON

Any


阅读了互联网上的许多文章和 S.O.我想我仍然不明白正则表达式单词边界: \b

第一个正则表达式没有给我预期的结果,我认为它必须给我“ON Any On Any”,但它仍然没有给我那个。

第二个正则表达式给了我元组,但我不知道为什么或不理解其含义:('', '')

第三个正则表达式在分隔行和中间的空行上打印结果

您能帮助我理解这一点吗?

最佳答案

请注意,要匹配 ON ANY,您需要在 ONON 之间添加转义空格(因为您使用的是 re.VERBOSE 标志) ANY 作为 \b 字边界作为零宽度断言不会消耗任何文本,只是断言一个位置特定字符之间。这就是您的第一个 re.compile(r'''\bON\bANY\b''', re.VERBOSE) 方法失败的原因。

使用

rx = re.compile(r''' \bON\ ANY\b ''', re.VERBOSE|re.IGNORECASE)

请参阅Python demo

re.compile(r'''\b(ON)?\b(Any)?''', re.VERBOSE) 返回自您定义 (.. .)捕获模式中的组

re.compile(r'''\b(?:ON)?\b(?:Any)?''', re.VERBOSE) 匹配可选序列,ONAny,因此您可以将这些单词作为值。您也会得到空值,因为此正则表达式只能匹配单词边界(所有其他子模式都是可选的)。

有关字边界的更多详细信息:

关于Python 正则表达式单词边界出现意外结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39875620/

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