如何写出应该重复的模式?

时间:2018-08-11 14:16:02

标签: regex pattern-matching

我有一排图案:

double1, +double2,-double3

对于单个双值模式是:

[+-]?([0-9]+([.][0-9]*)?|[.][0-9]+)

如何使其达到三重价值? 如:

  • 1.1, 0, -0
  • 0, -123, 33

不适用于:

  • ""
  • 1,123
  • 123,123,123,123

2 个答案:

答案 0 :(得分:2)

双部分([.][0-9]*)?是可选的,它将匹配0或1次。

要匹配三倍,您可以使用[-+]?(?:[0-9]+(?:\.[0-9]+)?|\.[0-9]+)匹配一个双精度字,它会匹配一个可选的+-,后跟一个将匹配一个数字,然后匹配一个可选字符的交替字符与一个点和一个或多个数字匹配的部分或一个点与一个或多个数字匹配的部分。

使用前面带有逗号的量词{2}重复该模式2次,并将空格字符\s*重复零次或多次。

添加锚以断言字符串的开头^和结尾$,如果您只想检查字符串是否为(?:,则可以使用非捕获组select [Attribute Name] from [AF].[Producer Well Template] where [test].[test_data].[Attribute_old]=[Existing Attribute Name] 。匹配,不再参考这些组。

{{3}}

答案 1 :(得分:2)

您可以使用更简单的模式:

^(?:(?:^[+-]?|, ?[+-]?)\d+(?:\.\d+)?){3}$

仅匹配您在编辑中指定的三次出现。 您可以here尝试一下。


正如《第四只小鸟》在下面的评论中正确指出的,如果您希望匹配诸如.9之类的条目,其中句号前没有数字,则可以使用:

^(?:(?:^[+-]?|, ?[+-]?)(?:\d+(?:\.\d+)?|\.\d+)){3}$

您可以检查此模式here