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

时间:2015-06-12 10:39:35

标签: c# regex match

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

我测试的是:

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

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

有什么问题?

由于 最好的问候。

5 个答案:

答案 0 :(得分:1)

您忘了逃避\

Match match = Regex.Match("12345678$1", "[^\\$]*");
Console.WriteLine(match.Value);
match = Regex.Match("123456781", "[^\\$]*");
Console.WriteLine(match.Value);

输出:

12345678
123456781

正如dolgsthrasir所指出的那样,你不需要在你的正则表达式中$逃脱,所以"[^$]*"没问题。

答案 1 :(得分:1)

试试这个

System.Text.RegularExpressions.Match match = System.Text.RegularExpressions.Regex.Match("12345678$1", "([^\\$]+)");

提取的字符串应该是第1组。

答案 2 :(得分:0)

从我得到的,你正在使用的表达式将匹配任何由0或更多任何非$字符实例组成的字符串。

您可以尝试以下内容:

        string sample = "1234578";
        Regex regex = new Regex("(.+?)(\\$|$)");
        if (regex.IsMatch(sample))
        {
            Match match = regex.Match(sample);
            Console.WriteLine(match.Groups[1]);
        }

哪个匹配并提取最多$的任何数字(表示为\\$),否则,字符串的结尾(由$表示),这是最先出现的。

答案 3 :(得分:0)

您不需要正则表达式,只需使用IndexOfSubString

var str = "12345678$1";
int index = str.IndexOf("$");
if(index < 0)
    return str;
else
    return str.Substring(0, index);

Example

答案 4 :(得分:-2)

System.Text.RegularExpressions.Match match = System.Text.RegularExpressions.Regex.Match("12345678$1", "(.+)\\$");

您的结果将在match.Groups [1]