正则表达式匹配0个或多个不起作用的事件

时间:2015-12-21 11:22:09

标签: c# regex

这个问题可能听起来很愚蠢。但是我尝试了几种选择,但没有一种可行。

我在字符串变量中有以下内容。

string myText="*someText*someAnotherText*";

我的意思是,在“someText”之前可以有0个或更多个字符。 “someText”之后和“someAnotherText”之前可以有0个或更多字符。最后,在“someAnotherText”之前可能出现0次或更多次任何字符。

我尝试了以下内容。

string res= Regex.Replace(searchFor.ToLower(), "*", @"\S*");

它不起作用。 然后我尝试了以下内容。

string res= Regex.Replace(searchFor.ToLower(), "*", @"\*");

即使这样也行不通。

有人可以帮忙吗? 尽管我已经提到“*”表示出现0次或更多次,但它表示我没有提到出现次数。

2 个答案:

答案 0 :(得分:2)

与DOS通配符不同,正则表达式中的*字符表示重复上一项(字符,组,等等)0次或更多次。在正则表达式中第一个*没有前面的字符,第二个跟随t字符,所以会重复多次。

要获得'0或更多任何字符',您需要使用.* .为'任何字符'且*为'0或更多次'的作文{。}}。< / p>

换句话说,在someText后面搜索someAnotherText跟随任意数量的字符后,您将使用以下正则表达式:

var re = new Regex(@"someText.*someAnotherText");

请注意,除非您通过将开始/结束说明符放在(^表示字符串的开头,$表示结束)中指定,否则正则表达式将匹配测试字符串的任何子字符串。

测试上述内容,全部返回true:

re.IsMatch("This is someText, followed by someAnotherText with text after.");
re.IsMatch("someTextsomeAnotherText");
re.IsMatch("start:someTextsomAnotherText:end");

等等。

在正则表达式中,*是量词。其他量词是:

?     Match 0 or 1
+     Match 1 or more
{n}   Match 'n' times
{n,}  Match at least 'n' times
{n,m} Match 'n' to 'm' times

全部适用于正则表达式中的前一个术语。

?放在另一个量词之后(包括?)会将其转换为惰性格式,在此格式中它会尽可能少地匹配。这将允许以下术语也与您指定的术语相匹配。

答案 1 :(得分:0)

匹配0个或多个任何字符的正则表达式是

.*

其中.匹配任何单个字符,*匹配零次或多次匹配。

(这个答案是对当前答案的快速参考简化。)