C# 如果字符串为';百分比符号旁边是什么?

C# 如果字符串为';百分比符号旁边是什么?,c#,regex,C#,Regex,我有大量的字符串需要解析,我想在它们靠近百分比符号时从中提取数字,只有当它们靠近百分比符号时,否则返回空字符串。示例字符串是 “43-20如果你能找到一条穿过岩浆河的路,我估计你有60%的机会到达神圣力量的源头之一。” 我只想提取60个。我相信我的问题的答案涉及正则表达式。这里有一个正则表达式,它将在百分号之前找到连续数字 string text = "43-20If you can find a way through the river of magma, I calculate a 60%

我有大量的字符串需要解析,我想在它们靠近百分比符号时从中提取数字,只有当它们靠近百分比符号时,否则返回空字符串。示例字符串是

“43-20如果你能找到一条穿过岩浆河的路,我估计你有60%的机会到达神圣力量的源头之一。”


我只想提取60个。我相信我的问题的答案涉及正则表达式。

这里有一个正则表达式,它将在百分号之前找到连续数字

string text = "43-20If you can find a way through the river of magma, I calculate a 60% chance you will arrive at one of the sources of sacred power. Here's another: 100%.";

foreach (Match match in Regex.Matches(text, @"(\d+)%"))
{
    Console.WriteLine("Found: " + match.Groups[1].Value);
}

仅此正则表达式就足够了
(\d+)%


请参见此处

如果您想提取值,而不仅仅是检查是否存在匹配,那么我将使用以下正则表达式:

(?<num>\d+)(?:\%)
(?\d+(:\%)
然后,您可以通过以下方式获得该号码:

string number = Regex.Match(text, @"(?<num>\d+)(?:\%)").Groups["num"].Value;
string number=Regex.Match(text,@“(?\d+(\%”))组[“num”]值;
干杯


编辑:这称为“命名捕获组”,而第二个为%符号,它是一个非捕获组。

+0:您需要添加捕获
(\d+)%
-现在它发现
60%
,而不是
60
。很抱歉,我粘贴了代码示例的旧版本:)已更新。
match
Groups
属性包含整个匹配的正则表达式,然后是每个捕获的组的一个条目。这里,第一个捕获组是(\d+)(1+位),通过
match.Groups[1]
访问。很好,我通过使用其他一些代码提取%符号来实现它。60.5或60.112怎么样?小数位数?如果字符串包含多个数字,则您的解决方案将不起作用。它将只检索一个值。@SpiderCode您仍然可以使用
foreach
对其进行迭代,它将打印出所有匹配项