我知道单词边界的定义是(?<!\w)(?=\w)|(?<=\w)(?!\w)
,我也希望在单词边界的定义中添加下划线(可选)。
一种实现方法是,我们可以像新定义一样简单地修改定义(_)?((?<!\w)(?=\w)|(?<=\w)(?!\w))
,但是不希望使用太长的表达式。
简便的方法可以是:如果我可以在字符类内部编写单词边界,则在字符类内部添加下划线就像一样非常容易[\b-]
,但是问题是放在\b
字符类内部,即[\b]
,意味着退格字符不是单词边界。
请告诉解决方案,即如何\b
在不丢失其原始含义的情况下放入字符类。
您可以使用环顾四周:
(?:\b|(?<=_))word(?=\b|_)
^^^^^^^^^^^^^ ^^^^^^^
请参阅regex演示,其中(?:\b|(?<=_))
是一个非捕获组,它匹配单词边界或前缀为的位置_
,并且(?=\b|_)
是一个正向超前匹配字词边界或_
符号的匹配项。
不幸的是,Pythonre
不允许使用,(?<=\b|_)
因为后向模式的宽度应固定(否则,您将得到 look-behind requires fixed-width pattern
错误)。
一个Python的演示:
import re
rx = r"(?:\b|(?<=_))word(?=\b|_)"
s = "some_word_here and a word there"
print(re.findall(rx,s))
另一种解决方案是使用自定义单词边界,例如(?<![^\W_])
/
(?![^\W_])
(请参阅在线演示):
rx = r"(?<![^\W_])word(?![^\W_])"
(?<![^\W_])
如果没有非单词和_
char以外的字符,否定的lookbehind匹配失败(因此,它要求字符串的开头或任何单词char不包括搜索词_
之前 的字符),(?![^\W_])
如果没有其他char
,否定的lookahead将失败而不是非单词和_
字符(也就是说,要求字符串的末尾或不包括在内的单词字符_
)。
词边界 \b 是一种检查,就像 ^ 和 $ 一样。 当正则表达式引擎(实现搜索正则表达式的程序模块)遇到 \b 时,它会检查字符串中的位置是否是词边界。 有三种不同的位置可作为词边界: 在字符串开头,如果第一个字符是单词字符 \w。 在字符串中的两个字符之间,其中一个是单词字符 \w,另一个不是。 在字符串末尾,如果最后一个字符是单词字符 \w。 例如,可以在 Hello, Java! 中找到匹配
使用正则表达式匹配表达式 为什么这两个示例匹配如下(突出显示): c# < code>a #b #c #d 具体来说,为什么第一个字符串不匹配包含最后一个#之前的所有内容? 由于单词边界(\b)是零宽度匹配,可以在单词字符(\w)和非单词字符(\ w)之间匹配,或者在单词字符和字符串的开始或结束之间匹配,我不确定以非单词字符结束表达式会如何影响匹配。
我正在尝试编写我的第一个Elasticsearch分析插件,我从github中找到了一个可扩展的标准Analyzer插件项目:Elasticsearch分析standardext,在该项目中它提供了以下代码: 这里是链接 我想知道如何获得这些单词边界的字符类。 我问有问题的作者:如何获得单词边界“字符类”?#2,但是作者似乎不会回答我的问题。 我尝试阅读Unicode文本分段文档:https://
我正在寻找一个正则表达式来grep整个单词,包括由数字或下划线分隔的单词。\\b认为数字和下划线是单词的一部分,而不是边界。 例如,我想在“DOG-MOUSE-CAT”、“DOG-MOUSE:CAT”和“DOG\u-MOUSE9CAT”以及表达式的结尾或开头捕捉鼠标,如“MOUSE9CAT”和“DOG\u-MOUSE”。基本上,我要查找的边界是任何非大写字母字符加上行/表达式的开头和结尾(这里可能
问题内容: 我想做的是一项相当普通的任务,但我在网络上找不到任何参考。我的文字带有标点符号,我想要一个单词列表。 应该 但是只能使用一个参数,因此在用空格分割后,所有单词都带有标点符号。有任何想法吗? 问题答案: 正则表达式合理的情况:
问题内容: 我想在Elastisearch中使用单词边界进行正则表达式查询,但是看起来Lucene正则表达式引擎不支持。我可以使用哪些解决方法? 问题答案: 在ElasticSearch regex风格中,没有直接等效于单词边界的功能。最初是一样的东西,如果用一个字字符开始,并且尾部就像如果用一个字字符结束。 因此,我们需要确保在字符串的前后或字符串的开始/结束处有一个非单词char 。由于正则表