我正在尝试使用正则表达式来验证/从字符串中提取所有字符,直到第一个美元。如果字符串没有任何美元,它应该匹配整个字符串,但它不起作用。
我测试的是:
System.Text.RegularExpressions.Match match = System.Text.RegularExpressions.Regex.Match("12345678$1", "/[^\$]*/");
我期望进入match.value => 12345678 如果传递的字符串是例如123456781,它应该返回所有内容。
有什么问题?
由于 最好的问候。
答案 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)
您不需要正则表达式,只需使用IndexOf
和SubString
var str = "12345678$1";
int index = str.IndexOf("$");
if(index < 0)
return str;
else
return str.Substring(0, index);
答案 4 :(得分:-2)
System.Text.RegularExpressions.Match match = System.Text.RegularExpressions.Regex.Match("12345678$1", "(.+)\\$");
您的结果将在match.Groups [1]
中