我想要一个正则表达式,应用于 "firstsecondthird" 时能够匹配 "firstthird"(在单个分组中,即在C#中
这是否可能?我们可以忽略前缀或后缀,但如何处理中间部分?
Match.Value
等于"firstthird")。这是否可能?我们可以忽略前缀或后缀,但如何处理中间部分?
匹配以'first'开头,中间有零个或多个字符,最后以'third'结尾的字符串。这是您的意思吗?
"^first(.*)third$"
您是指如果找到字符串“firstsecondthird”,是否放弃除“first”和“third”之外的所有内容?
replace("^(first)second(third)$", "$1$2")
不,没有办法从目标字符串中创建包含非连续文本的单个匹配组。您需要使用replace或将匹配组粘合在一起形成一个新字符串。
replace();
进行替换:String inputVar = "firstsecondthird";
String resultVar = Regex.replace(inputVar, "^(first)second(third)$", "$1$2");
我知道这个问题几年前提出过,但是为了那些仍然在寻找答案的人,有一种方法,不同于其他回答,可以排除中间的某一部分,只使用一个表达式。
诀窍是使用“非捕获组”。这个特性允许使用包括一个组的表达式来搜索,但是该组不包括在结果中。
其语法如下:
(?:Groups Contents)
这将与表达式的其余部分匹配,但该组将从返回结果中排除。
例如,如果您将以下表达式应用于由换行符分隔的名称列表,则:
\w{2,} (?:Micheal |James )\w{2,}
它将匹配每个名字包含“Micheal”或“James”的人,但只返回他们的名字和姓氏。
在以下列表中,匹配项以斜体显示,返回文本以粗体显示:
Duke Jamesson
Bob James
Bob Micheal Jones
James Anderson
Joseph Micheal Hetton
Bill James Johnson
George Ronald McCarthy