我想找到包含给定字母序列的单词。但是,这个词应该与给定的禁止词不同。
例如在 " modal dalaman odal Modal ODAL amodal modalex amodale" 如果序列是" dal"被禁止的单词是模态的,我想得到dalaman,odal,ODAL,amodal,modalex,amodale。
我怎样才能在正则表达式中这样做?顺便说一句,这个问题没有特定的编程语言。
答案 0 :(得分:1)
您可以使用以下此模式匹配包含" bar"的所有字词。但不等于"模态"全文。
模式:
\w*dal(?<!\bmodal\b)\w*
说明:
\w*
匹配任意数量的字词(字母数字和下划线&#34; _&#34;),包括零dal
匹配序列&#34; dal&#34;字面上(?<!\bmodal\b)
是一个消极的外观,它可以保证序列&#34;模态&#34;无法在此令牌的左侧立即匹配。\b
仅在字边界处匹配,但不会消耗任何字符。\w*
匹配任意数量的字词(字母数字和下划线&#34; _&#34;),包括零Check this regex out on regex101.com
这是我的回答的旧版本,在更新问题之前有效:
您可以将下面的模式与i
(不区分大小写)标记一起使用
根据您用于处理正则表达式的编程语言或环境,您可能还必须设置g
(全局)标志以匹配模式的所有单独出现,或使用搜索所有模式的环境方法匹配,例如在Python re.findall()
中。
模式:
\S*(?<!mo)dal\S*
说明:
\S*
匹配任意数量的非空白字符,包括零(?<!mo)
是一个消极的外观,它确保了序列&#34; mo&#34;无法在此令牌的左侧立即匹配dal
匹配序列&#34; dal&#34;字面上\S*
匹配任意数量的非空白字符,包括零Check this regex out on regex101.com
更一般地说,你可以使用这种模式:
\S*(?<!%%FORBIDDEN_LEFT%%)%%REQUIRED%%(?!%%FORBIDDEN_RIGHT%%)\S*
将占位符%%REQUIRED%%
,%%FORBIDDEN_LEFT%%
和%%FORBIDDEN_RIGHT%%
替换为您需要的任何字符串后。
例如,如果你想匹配&#34; cd&#34;但不是&#34; abcdef&#34;,你必须使用模式\S*(?<!ab)cd(?!ef)\S*
。