正则表达式匹配引号之间的数字除外

时间:2014-03-17 15:03:13

标签: regex

我正在构建一些基本的sql语句。

插入表格值('带有20',20.65,70,80的文字)

除了字符串中的数字之外,是否有任何正则表达式匹配所有数字? 如果你有一个正则表达式模式,以避免评论中的数字,这将是很好的!

提前致谢!

3 个答案:

答案 0 :(得分:1)

使用前瞻性的偶数以下引号(偶数表示匹配 引号外):

-?\d+(.\d+)?(?=(([^']*'){2})*[^']*$)

查看显示匹配的live demo,如下所示:

  

插入表值('文字带20', 20.65 70 80 ,'更多文字1234 foo', 9

答案 1 :(得分:0)

试试这个 -

(?=[,(])[^']*?(\d+(?:\.\d+)?)[^']*?(?=[,)])

这只会在(..)内匹配 演示here

编辑 -
转义的正则表达式用于c# -

(?=[,(])[^']*?(\\d+(?:\\.\\d+)?)[^']*?(?=[,)])

答案 2 :(得分:0)

只要您的输入有限,这可能对您有用。

(?:\(|, )(\b[\d.]+\b)(?:,|\))

Regular expression visualization

Debuggex Demo

请注意,您需要在每次匹配后按字符支持搜索位置。这会将数字放入捕获组1中,并且要求小数位于数字的中间(不在末尾),尽管它不会阻止多个小数。

虽然正确地匹配这些引用的数字:

'1000, 2000' 

错误地捕获这些:

'Some numbers that really should not be matched: (1, 2)'

它还无法理解何时转义引号。但是,根据您输入的限制,这可能就足够了,或者至少是一个起点。