题
如何编写正则表达式来匹配任何不符合特定模式的字符串?我面临着必须匹配(A 和〜B)模式的情况。
解决方案
您可以使用前瞻声明:
(?!999)\d{3}
此示例匹配999
以外的三个数字。
但是如果您没有使用此功能的正则表达式实现(请参阅正则表达式的比较),您可能需要自己构建一个具有基本功能的正则表达式。
仅具有基本语法的兼容正则表达式为:
[0-8]\d\d|\d[0-8]\d|\d\d[0-8]
这也匹配任何不是<=>的三位数序列。
其他提示
如果要匹配字符串中的单词A而不匹配单词B.例如: 如果您有文字:
1. I have a two pets - dog and a cat
2. I have a pet - dog
如果您想为宠物搜索拥有狗的文字行,而没有猫,则可以使用此正则表达式:
^(?=.*?\bdog\b)((?!cat).)*$
它只会找到第二行:
2. I have a pet - dog
匹配模式并使用宿主语言反转匹配的布尔结果。这将更加清晰易读。
我在这里的回答也许也能解决你的问题:
https://stackoverflow.com/a/27967674/543814
- 您可以使用“匹配”而不是“替换”。
- 而不是团体
$1
, ,你会读到组$2
. - 团体
$2
在那里被设为非捕获,你会避免这种情况。
例子:
Regex.Match("50% of 50% is 25%", "(\d+\%)|(.+?)");
第一个捕获组指定您希望避免的模式。最后一个捕获组捕获其他所有内容。只需读出该组, $2
.
(B)|(A)
然后使用第2组捕获的内容......
不隶属于 StackOverflow