gpt4 book ai didi

python - 如何在 python 中的字符类中写入单词边界而不丢失其含义?我想在单词边界(\b)的定义中添加下划线(_)

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

我知道单词边界的定义是 (?<!\w)(?=\w)|(?<=\w)(?!\w)我也希望在单词边界的定义中添加下划线(可选)。

一种方法是我们可以简单地修改定义就像新的一样(_)?((?<!\w)(?=\w)|(?<=\w)(?!\w)), 但不希望使用太长的表达式。

Easy Approach 可以如果我可以在字符类中写单词边界,那么在字符类中添加下划线就很容易了,就像 [\b-] 一样。 , 但问题是把 \b内部字符类即 [\b] , 表示退格字符而不是单词边界。

请告诉解决方案,即如何放置 \b在字符类中而不失去其原始含义。

最佳答案

您可以使用环视:

(?:\b|(?<=_))word(?=\b|_)
^^^^^^^^^^^^^ ^^^^^^^

参见 regex demo其中 (?:\b|(?<=_))是一个非捕获组,匹配单词边界或以 _ 开头的位置, 和 (?=\b|_)是匹配单词边界或 _ 的正前瞻符号。

不幸的是,Python re不允许使用 (?<=\b|_)因为后视模式应该是固定宽度的(否则,您将得到 look-behind requires fixed-width pattern 错误)。

A Python demo :

import re
rx = r"(?:\b|(?<=_))word(?=\b|_)"
s = "some_word_here and a word there"
print(re.findall(rx,s))

另一种解决方案是使用自定义单词边界,例如 (?<![^\W_])/(?![^\W_]) (参见 online demo):

rx = r"(?<![^\W_])word(?![^\W_])"

(?<![^\W_])如果除了非单词和 _ 之外没有其他字符,则负向后查找会导致匹配失败。 char(因此,它需要字符串或任何单词 char 的开头,不包括 _ before 搜索词)和 (?![^\W_])如果除了非单词和 _ 之外没有其他字符,否定前瞻将导致匹配失败char(即,需要字符串结尾或不包括 _ 的单词 char)。

关于python - 如何在 python 中的字符类中写入单词边界而不丢失其含义?我想在单词边界(\b)的定义中添加下划线(_),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41460829/

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