gpt4 book ai didi

c# - 匹配 0 次或多次出现的正则表达式不起作用

转载 作者:行者123 更新时间:2023-12-05 00:41:27 25 4
gpt4 key购买 nike

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

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

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 次或多次,但它表示我没有提到出现次数。

最佳答案

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

要获得“0 个或多个任意字符”,您需要使用组合 .* 其中 . 是“任意字符”并且 * 是“0 次或多次”。

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

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

所有都适用于正则表达式中的前一个术语。

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

关于c# - 匹配 0 次或多次出现的正则表达式不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34394507/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com