regexp只匹配一次出现,后跟两位数字

时间:2018-09-27 14:53:53

标签: regex

如果以下两种情况都成立,我想用,替换.

  • ,在字符串中只能出现一次
  • ,后应最多两位数字

这些还可以:1 000 000,511.000,9
这些不是:9,523,036.111,000

到目前为止,我的发展情况:https://regex101.com/r/njuKtb/1

2 个答案:

答案 0 :(得分:1)

您可以使用此正则表达式进行搜索:

^([^,]*),(?=\d{1,2}(?!\d))(?!.*,)

并使用此替换:

$1.

RegEx Demo

RegEx详细信息:

  • ^([^,]*):在开头匹配0个或多个非逗号字符
  • ,:匹配文字逗号
  • (?=\d{1,2}(?!\d)):匹配1或2位数字,后跟另一位数字
  • (?!.*,):确保我们前面没有逗号

或者将其用于搜索:

^([^,]*),(?=\d{1,2}(?!\d))([^,\n]*)$

并替换为:

$1.$2

答案 1 :(得分:0)

您可以这样做:

/^(?!^[^,\n]*,[^,\n]*,[^,\n]*)(?:[^,\n]*),(?=\d{1,2}\D*$)/m

Demo

哪个是

^                            Start of string or line                 
(?!^[^,\n]*,[^,\n]*,[^,\n]*) Only matches lines with a single ','
(?:[^,\n]*)                  Suck up the LH before the ,
,                            The , 
(?=\d{1,2}\D*$)              no more than two \d before end of the line