这个问题可能听起来很愚蠢。但是我尝试了几种选择,但都没有奏效。
我在字符串变量中有以下内容。
string myText="*someText*someAnotherText*";
Run Code Online (Sandbox Code Playgroud)
我上面的意思是,“someText”之前可以有 0 个或多个字符。在“someText”之后和“someAnotherText”之前可以有 0 个或多个字符。最后,在“someAnotherText”之前可以有 0 次或多次出现任何字符。
我尝试了以下方法。
string res= Regex.Replace(searchFor.ToLower(), "*", @"\S*");
Run Code Online (Sandbox Code Playgroud)
它没有用。然后我尝试了以下方法。
string res= Regex.Replace(searchFor.ToLower(), "*", @"\*");
Run Code Online (Sandbox Code Playgroud)
即使那样也行不通。
有人可以帮忙吗?尽管我已经提到“*”来表示出现 0 次或多次,但它表示我没有提到出现次数。
与 DOS 通配符不同,*正则表达式中的字符意味着重复前一项(字符、组等)0 次或更多次。 在您的正则表达式中,第一个*没有前面的字符,第二个在t字符后面,因此将重复任意次数。
要获得“0或多个任意字符”你需要使用的组成.*哪里.是“任何字符”和*“0次以上”。
换句话说,要搜索someText后面的任意数量的字符,someAnotherText您将使用以下正则表达式:
var re = new Regex(@"someText.*someAnotherText");
Run Code Online (Sandbox Code Playgroud)
请注意,除非您通过将开始/结束说明符放入(^用于字符串的开始,$用于结束)来另外指定,否则正则表达式将匹配测试字符串的任何子字符串。
上面的测试,都返回真:
re.IsMatch("This is someText, followed by someAnotherText with text after.");
re.IsMatch("someTextsomeAnotherText");
re.IsMatch("start:someTextsomAnotherText:end");
Run Code Online (Sandbox Code Playgroud)
等等。
在正则表达式中*是一个量词。其他量词是:
? 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
Run Code Online (Sandbox Code Playgroud)
所有这些都适用于 Regex 中的前一项。
将 a放在?另一个量词(包括?)之后会将其转换为惰性形式,在这种形式中它将匹配尽可能少的项目。这将允许以下条款也与您指定的条款相匹配。