![](/img/trans.png)
[英]Regex pattern for checking if a string starts with a certain substring?
[英]Regex match certain string and ignore if it starts with some pattern
我在C#代码中使用以下正则表达式尝试匹配,在文件中save some
后跟一些单词,并delete some
后跟一些单词。
\\bsave\\ssome\\b\\s[^\\s]+|\\bdelete\\ssome\\b\\s[^\\s]+
这按预期工作。 现在,我想从匹配中排除那些具有类似- save some
- delete some
的模式的那些。
我尝试使用以下内容,但没有用。 在下面的表达式中,我只是使用了表达式来忽略- save some
感谢任何帮助。 (?!-\\s\\bsave\\ssome\\b\\s[^\\s])(\\bsave\\ssome\\b\\s[^\\s]+|\\bdelete\\ssome\\b\\s[^\\s]+)
演示在这里
您需要使用负向后看并将模式分组:
(?<!-\p{Zs}*)(?:\bsave\ssome\b\s[^\s]+|\bdelete\ssome\b\s[^\s]+)
^^^^^^^^^^^^ ^ ^
如果后面的(?<!-\\p{Zs}*)
查找save/delete
失败,则匹配失败-
后面有零个或多个空格(如果必须至少有一个,则使用+
)。 我使用\\p{Zs}
仅匹配水平空白。 如果要匹配换行符,请使用\\s
。
合同规定的正则表达式版本:
(?<!-\s*)\b(save|delete)\ssome\b\s\S+
使用Explicit Capture
标志用它 。 由于\\ssome\\b\\s\\S+
在这两种选择中都是通用的,因此您可以将组的末尾移动到只包含save
和delete
。
C#:
var rx = @"(?<!-\s*)\b(save|delete)\ssome\b\s\S+";
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.