如何获取号码

问题描述 投票:0回答:2
myPattern = @"?:[.]?[\d]+(?:[,.]*\d)*";

但是,我想排除美元符号($)后面的数字,并想排除括号(){}[]中的数字。

例如:

input text (match)
-----------------------------
abc123,000.5xyz (match:123,000.5)
abc.5xyz (match:.5)
abc0.2xyz  (match:0.2)
abc123.2xyz (match:123.2)
abc$123xyz (false)
abc(123)77xyz (match:77)
abc12{123}xyz (match:12)
abc[123]xyz (false)
c# regex
2个回答
0
投票

您可以使用这个正则表达式:

(?<![${([\d])\d+(,\d{3})*(\.\d+)?(?![]})])

它匹配:

  • (?<![${([\d])
    :对
    $
    (
    [
    {
    或数字进行负向后查找(后者阻止从数字序列的中间进行匹配)
  • \d+(,\d{3})*(\.\d+)?
    :正则表达式匹配带有可选千位和小数部分的数字
  • (?![]})])
    :对
    ]
    }
    )
  • 进行否定前瞻

正则表达式演示 regex101


0
投票

最简单的方法是稍微放松你的要求,并使用零宽度断言:

(?<![\[\({\$])((?:\d+(?:[,.]\d+)?)|(?:[,.]\d+))

这将捕获所有前面没有 [({$ 的数字,即我们不检查它们是否在完整的括号/圆括号内。

  • (?<![\[\({\$])
    将检查前面的字符
  • (?:\d+(?:[,.]\d+)?)
    带有 xxx.xxx 或仅 xxx 的数字
  • (?:[,.]\d+)
    带有 .xxx
  • 的数字
© www.soinside.com 2019 - 2024. All rights reserved.