[英]How to ignore regex matches in C#?
输入字符串:
string datar = "aag, afg, agg, arg";
我正在尝试获取匹配项:“ aag”和“ arg”,但以下操作无效:
string regr = "a[a-z&&[^fg]]g";
string regr = "a[a-z[^fg]]g";
在C#中忽略正则表达式匹配的正确方法是什么?
显而易见的方法是使用a[a-eh-z]g
,但是您也可以尝试使用负向后视,例如:
string regr = "a[a-z](?<!f|g)g"
说明:
a
匹配字符“a” [az]
匹配“ a”和“ z”之间的单个字符 (?<!XXX)
断言不可能将下面的正则表达式与在此位置结束的匹配相匹配(负向后看)
f|g
匹配字符“ f”或匹配字符“ g” g
匹配字符“ g” 角色类并不是那么花哨。 简单的解决方案是:
a[a-eh-z]g
如果您确实想明确列出不属于您的字母,则可以尝试以下方法:
a[^\W\d_A-Zfg]g
该字符类匹配所有内容,除了:
\\W
排除非单词字符,即标点符号,空格和其他特殊字符。 剩下的是字母,数字和下划线_
。 \\d
删除数字,所以现在我们有了字母和下划线_
。 _
删除下划线,因此现在我们仅匹配字母。 AZ
删除了大写字母,所以现在我们只匹配小写字母。 总而言之,这比我们可能想要的要复杂得多。 这是您的正则表达式!
您使用的是Java的集合交集语法:
a[a-z&&[^fg]]g
表示两个集合('a' THROUGH 'z')
和(ANYTHING EXCEPT 'f' OR 'g')
('a' THROUGH 'z')
的交集。 我所知道的其他正则表达式都没有使用该符号。 .NET风格使用更简单的集合减法语法:
a[a-z-[fg]]g
...即集合('a' THROUGH 'z')
减去集合('f', 'g')
。
Java演示:
String s = "aag, afg, agg, arg, a%g";
Matcher m = Pattern.compile("a[a-z&&[^fg]]g").matcher(s);
while (m.find())
{
System.out.println(m.group());
}
C#演示:
string s = @"aag, afg, agg, arg, a%g";
foreach (Match m in Regex.Matches(s, @"a[a-z-[fg]]g"))
{
Console.WriteLine(m.Value);
}
两者的输出是
aag
arg
如果要匹配arg
和aag
请尝试以下aag
:
a[ar]g
如果要匹配afg
和agg
以外的所有内容,则需要此正则表达式:
a[^fg]g
似乎您要匹配任意三个字母字符,但条件是第二个字符不能为f
或g
。 如果是这种情况,为什么不使用以下正则表达式:
string regr = "a[a-eh-z]g";
正则表达式: a[a-eh-z]g
。 然后使用Regex.Matches获取匹配的子字符串。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.