我想要一个正则表达式,当应用于:“firstsecondthird”将匹配“firstthird”(在单个组中,即在C#Match.Value
中将等于“firstthird”)。
这可能吗?我们可以忽略后缀或前缀,但是中间?
答案 0 :(得分:4)
匹配以'first'开头的字符串,具有零个或多个其他字符,然后以'third'结尾。这是你的意思吗?
"^first(.*)third$"
或者,你的意思是,如果你找到一个字符串'firstsecondthird',那么除了'first'和'third'之外的其他东西?
replace("^(first)second(third)$", "$1$2")
答案 1 :(得分:4)
不,没有办法让目标字符串中包含非连续文本的单个匹配组。您需要使用替换,或将匹配的组粘合到一个新的字符串中。
答案 2 :(得分:2)
AFAIK,无法使用单个正则表达式。您必须按以下方式拨打replace();
:
String inputVar = "firstsecondthird";
String resultVar = Regex.replace(inputVar, "^(first)second(third)$", "$1$2");
可以(通常......)根据需要插入表达式
答案 3 :(得分:0)
我知道这个问题是几年前提出的,但是为了让仍在这里寻找答案的任何人,有一种方法可以像其他答案一样,将其他部分排除在外在中间只有一个表达式。
诀窍是使用“非捕获组”。使用此功能,可以使用包含未包含在结果中的组的表达式进行搜索。
其语法如下:
(?:Groups Contents)
这将与表达式的其余部分匹配,但该组将从返回的结果中排除。
例如如果将以下表达式应用于以换行符分隔的名称列表,
\w{2,} (?:Micheal |James )\w{2,}
它将匹配每个人的中间名“ Micheal”或“ James”,但只返回其姓氏和名字。
在下面的列表中,匹配项以斜体显示,返回的文本以粗体显示:
詹姆森公爵
鲍勃·詹姆斯
鲍勃 米歇尔琼斯
詹姆斯·安德森
约瑟夫 米歇尔 Hetton
条例草案 詹姆斯约翰逊
乔治·罗纳德·麦卡锡