gpt4 book ai didi

python - 意外的 re.sub 行为

转载 作者:太空宇宙 更新时间:2023-11-04 07:16:52 24 4
gpt4 key购买 nike

我定义

s='f(x) has an occ of x but no y'
def italicize_math(line):
p="(\W|^)(x|y|z|f|g|h)(\W|$)"
repl=r"\1<i>\2</i>\3"
return re.sub(p,repl,line)

并进行了以下调用:

print(italicize_math(s)

结果是

'<i>f</i>(x) has an occ of <i>x</i> but no <i>y</i>'

这不是我所期望的。我想要这个:

'<i>f</i>(<i>x</i>) has an occ of <i>x</i> but no <i>y</i>'

谁能告诉我为什么第一次出现的 x 没有包含在“i”标签内?

最佳答案

当您确实需要单词边界 (\b) 时,您似乎在尝试匹配非字母数字字符 (\W):

>>> p=r"(\b)(x|y|z|f|g|h)(\b)"
>>> re.sub(p,repl,s)
'<i>f</i>(<i>x</i>) has an occ of <i>x</i> but no <i>y</i>'

当然,( 非字母数字 -- 你的内部内容不匹配的原因是因为 \W 消耗了一个匹配中的字符。因此对于像 'f(x)' 这样的字符串,当您匹配 f 时,您匹配 (。由于 ( 已经匹配,当您尝试匹配 x 时,它不会再次匹配 。相比之下,单词边界不消耗任何字符。

关于python - 意外的 re.sub 行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40947368/

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