我试图找到一个与" ab"匹配的单词的正则表达式。但不是" cd"。
例如,此正则表达式应与以下内容匹配:
abc
dab
kab
它不符合以下内容:
abcd
cdab
abertcd
答案 0 :(得分:0)
您可以在单词的开头使用否定前瞻:
\b(?![a-z]*cd)[a-z]*ab[a-z]*\b
使用不区分大小写的i
选项来匹配大写字词。
\b
匹配单词的开头,(?![a-z]*cd)
确保在由英文字母组成的单词中没有cd
。最小的单词是ab
。
根据编程语言,可以进一步增强(例如匹配Unicode字母)。
请参阅demo
答案 1 :(得分:-1)
您可以使用(否定)lookaround来确保ab
在字符串中,但cd
不是:
^(?!.*cd).*ab.*$
^
- 字符串的开头
(?!.*cd)
- 否定前瞻:不匹配cd
后面的任何内容(包括空字符串)
.*ab.*
- 包含ab
的任何字符串
$
- 字符串的结尾
Java示例:
System.out.println("ab".matches("^(?!.*cd).*ab.*$")); // true
System.out.println("abx".matches("^(?!.*cd).*ab.*$")); // true
System.out.println("xab".matches("^(?!.*cd).*ab.*$")); // true
System.out.println("cdab".matches("^(?!.*cd).*ab.*$")); // false
System.out.println("abcd".matches("^(?!.*cd).*ab.*$")); // false
System.out.println("abxxcd".matches("^(?!.*cd).*ab.*$")); // false
System.out.println("cdxxab".matches("^(?!.*cd).*ab.*$")); // false
Python示例:
import re
a = re.compile(r'^(?!.*cd).*ab.*$')
print a.match('abc') is not None # True
print a.match('abcd') is not None # False
print a.match('cdab') is not None # False
print a.match('ab') is not None # True
print a.match('abdc') is not None # True
print a.match('xab') is not None # True