用于验证和验证的正则表达式格式化具有不同小数分隔符的数字

时间:2015-06-12 09:20:32

标签: regex numbers delimiter substitution

我试图构建一个正则表达式来验证和捕获可以使用逗号或点作为分隔符的数字。验证后,我想使用替换输出格式化的数字。

这是我的输入和所需输出(或者至少足以显示我的情况):

,1 -> no match  
.1 -> no match  
1   -> 1  
10   -> 10  
10,5 -> 10,5  
333,5 -> no match  
5,555 -> no match  
10.50 -> 10,50  ( optimal output would be: 10,5 but not a requirement )  
blabla 10.5 blabla -> 1,5

分隔符两边最多有2位数字。

我使用以下正则表达式进行验证:

^.*(?<!\S)(\d{1,2})(?:([\,\.])(\d{1,2}))?(?!\S).*$

下面的替换正则表达式显然不起作用,因为没有小数的数字是错误的。

${number},${decimals}

只需1次测试即可完成1替换正则表达式?我想整个事情需要重做......但是怎么样? :)

1 个答案:

答案 0 :(得分:1)

以下是您可以做的事情:

(?<![\d,.])(\d{1,2})(?:[.,](\d{1,2}))?(?![\d,.])

Example

<强>解释

  1. (?<![\d,.]):不应以数字或分隔符开头(EG:','或'。')
  2. (\d{1,2}):一到两位数字
  3. (?:[.,](\d{1,2}))?:如果有分隔符(EG:','或'。'),则应至少有一到两位数字
  4. (?![\d,.]):不应该跟一个数字或分隔符(EG:','或'。')
  5. 修改:我添加了捕获组。您将能够获得第一个匹配的数字和第二个匹配的浮动值。

    更新:点数不再在角色类中转义。 (感谢@Tensibai)