我需要在字符串中找到包含一个整数和一个百分比数的整数。
实施例: 价格3500美元,折扣34% 我只需要提取3500。
目前我正在使用:
Regex.Match("price 3500 USD and discount 34%" , @"\d+");
但它不仅仅提取3500。
答案 0 :(得分:4)
你不需要正则表达式。一个简单的Linq就足够了
var numbers = inputstr.Split().Where(x => x.All(char.IsDigit)).ToArray();
答案 1 :(得分:2)
空白边界是关键。这种断言构成了 BOS和EOS上的比赛也是如此。
您可以在空白边界上找到整数,如下所示 -
# @"(?<!\S)\d+(?!\S)"
(?<! \S ) # Whitespace boundary
\d+
(?! \S ) # Whitespace boundary
您可以在空白边界上找到整数或十进制数字,如下所示 -
# @"(?<!\S)(?:\d+(?:\.\d*)?|\.\d+)(?!\S)"
(?<! \S ) # Whitespace boundary
(?: # Integer or decimal number
\d+
(?: \. \d* )?
| \. \d+
)
(?! \S ) # Whitespace boundary
答案 2 :(得分:1)
既然你说所有的数字都是空格分开的,你就可以这样做。
public static List<int> GetNumbers(string str)
{
List<int> numbers = new List<int>();
foreach (data; str.Split(' '))
{
int value;
if (int.TryParse(data, out value))
numbers.Add(value);
}
return numbers;
}
传递的字符串(str)是包含数字的字符串。
此外,如果您想获得小数,可以使用double.TryParse()
答案 3 :(得分:1)
我想一个解决方案是寻找没有单词字符的子串。
因此正则表达式为 ^\w+
。查看http://www.regexr.com/3bfdc。
编辑:答案不正确,因为它只与非单词混合。我认为正确的解决方案是使用 \w\d+\w
,它真正匹配所有唯一的数字子串。看到它正常工作here。
答案不正确,但我认为我有点匹配没有单词字符的子串(有空格边界)。给出了更好的解决方案,例如C#的优雅解决方案和另一个使用边界,外观和外观的正则表达式。