C# 正则表达式 匹配文本,直到特定字符
本文关键字:字符 正则表达式 文本 | 更新日期: 2023-09-27 17:55:48
我正在尝试让正则表达式验证/提取字符串中的所有字符,直到第一美元。如果字符串没有任何美元,它应该匹配整个字符串,但它不起作用。
我测试的是:
System.Text.RegularExpressions.Match match = System.Text.RegularExpressions.Regex.Match("12345678$1", "/[^'$]*/");
我期望的是进入 match.value => 12345678例如,如果传递的字符串是123456781它应该返回所有内容。
怎么了?
谢谢此致敬意。
试试这个
System.Text.RegularExpressions.Match match = System.Text.RegularExpressions.Regex.Match("12345678$1", "([^''$]+)");
提取的字符串应为组 1。
你忘了逃脱你的'
:
Match match = Regex.Match("12345678$1", "[^''$]*");
Console.WriteLine(match.Value);
match = Regex.Match("123456781", "[^''$]*");
Console.WriteLine(match.Value);
输出:
12345678
123456781
正如 dolgsthrasir 所指出的,你不需要在你的正则表达式中转义$
"[^$]*"
所以这很好。
据我所知,您使用的表达式将匹配由任何非$
字符的 0 个或多个实例组成的任何字符串。
您可以尝试如下操作:
string sample = "1234578";
Regex regex = new Regex("(.+?)(''$|$)");
if (regex.IsMatch(sample))
{
Match match = regex.Match(sample);
Console.WriteLine(match.Groups[1]);
}
它匹配并提取最多 $
个(表示为 ''$
)的任何数字,否则,字符串的末尾(用 $
表示),哪个先到。
你不需要正则表达式,你可以使用 IndexOf
和 SubString
var str = "12345678$1";
int index = str.IndexOf("$");
if(index < 0)
return str;
else
return str.Substring(0, index);
例
System.Text.RegularExpressions.Match match = System.Text.RegularExpressions.Regex.Match("12345678$1", "(.+)''$");
您的结果将匹配。团队[1]