这个问题可能听起来很愚蠢。但是我尝试了几种选择,但没有一种可行。
我在字符串变量中有以下内容。
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次或更多次,但它表示我没有提到出现次数。
答案 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个或多个任何字符的正则表达式是
.*
其中.
匹配任何单个字符,*
匹配零次或多次匹配。
(这个答案是对当前答案的快速参考简化。)