C# 正则表达式 匹配文本,直到特定字符

本文关键字:字符 正则表达式 文本 | 更新日期: 2023-09-27 17:55:48

我正在尝试让正则表达式验证/提取字符串中的所有字符,直到第一美元。如果字符串没有任何美元,它应该匹配整个字符串,但它不起作用。

我测试的是:

System.Text.RegularExpressions.Match match = System.Text.RegularExpressions.Regex.Match("12345678$1", "/[^'$]*/");

我期望的是进入 match.value => 12345678例如,如果传递的字符串是123456781它应该返回所有内容。

怎么了?

谢谢此致敬意。

C# 正则表达式 匹配文本,直到特定字符

试试这个

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]);
        }

它匹配并提取最多 $ 个(表示为 ''$)的任何数字,否则,字符串的末尾(用 $ 表示),哪个先到。

你不需要正则表达式,你可以使用 IndexOfSubString

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]