正则expression式 – 如何匹配除特定模式以外的所有内容
如何编写正则expression式来匹配任何不符合特定模式的string? 我面临的情况是必须匹配(A和B)模式。
你可以使用前瞻性的断言:
(?!999)\d{3}
这个例子匹配999
以外的三个数字。
但是,如果您碰巧没有使用此function进行正则expression式实现(请参阅正则expression式风格的比较 ),则可能必须自行构build带有基本function的正则expression式。
只有基本语法的兼容正则expression式是:
[0-8]\d\d|\d[0-8]\d|\d\d[0-8]
这也匹配任何不是999
三位数字序列。
如果要在string中匹配单词A而不匹配单词B.例如:如果您有一个文本:
1. I have a two pets - dog and a cat 2. I have a pet - dog
如果你想search一条有宠物狗的文本行,而且没有猫,你可以使用这个正则expression式:
^(?=.*?\bdog\b)((?!cat).)*$
它只会find第二行:
2. I have a pet - dog
匹配模式并使用主机语言来反转匹配的布尔结果。 这将更清晰和可维护。
而不是复活这个古老的问题,因为它有一个没有提到的简单解决scheme。 (find你的问题,同时做一个正则expression式赏金任务的研究 。)
我面临的情况是必须匹配(A和B)模式。
这个基本的正则expression式非常简单: B|(A)
你只是忽略整个比赛,并检查第1组捕获,其中将包含A.
一个例子(关于在正则expression式中parsinghtml的所有免责声明):A是数字,B是<a tag
内的数字
正则expression式: <a.*?<\/a>|(\d+)
演示 (查看右下窗格中的组1)
参考
除了情况s1,s2,s3,如何匹配模式
除非…匹配模式
常规语言的补充也是一种常规语言,但要构build它,必须为常规语言构buildDFA ,并使任何有效的状态更改为错误。 看到这个例子。 页面没有说的是它将/(ac|bd)/
转换为/(a[^c]?|b[^d]?|[^ab])/
。 从DFA转换回正则expression式并不是微不足道的。 如果您可以使用正则expression式并更改代码中的语义,就像前面提出的一样,这样会更容易。
模式 – 重新
str.split(/re/g)
将返回除模式外的所有内容。
在这里testing
我的答案也可以解决你的问题:
https://stackoverflow.com/a/27967674/543814
- 而不是replace,你可以使用匹配。
- 您可以读取组
$2
,而不是组$1
。 - 组
$2
被捕获在那里,你会避免。
例:
Regex.Match("50% of 50% is 25%", "(\d+\%)|(.+?)");
第一个捕获组指定了你希望避免的模式。 最后一个捕获组捕获其他所有内容。 简单地读出那个组, $2
。
(B)|(A)
然后使用什么组2捕获…