在字符串中查找整数,除了包含% c#的数字
本文关键字:包含 数字 字符串 查找 整数 | 更新日期: 2023-09-27 18:04:43
我需要在包含一个整数和一个百分数的字符串中找到一个整数。
的例子:价格3500美元,折扣34%我只需要提取3500。
当前我正在使用:
Regex.Match("price 3500 USD and discount 34%" , @"'d+");
您不需要正则表达式。一个简单的Linq就足够了
var numbers = inputstr.Split().Where(x => x.All(char.IsDigit)).ToArray();
空白边界是这里的关键。这种类型的断言构造
在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
既然你说所有的数字都是用空格分开的,你可以简单地这样做。
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()
我想一个解决方案是寻找没有单词字符的子字符串。
那么正则表达式就是^'w+
。
编辑:答案是不正确的,因为它只计算了开头的非单词。我认为正确的解决方案是使用
'w'd+'w
,它真正匹配所有唯一的数字子字符串。
答案不正确,但我认为我得到了匹配子字符串(具有空间边界)的点,其中没有单词字符。给出了更好的解决方案,例如c#的优雅解决方案和使用边界和向后看的regex解决方案。