正则表达式与可选部分

时间:2015-05-21 14:44:14

标签: regex

我想为这段文字创建一个正则表达式:

 12.34  , 56.78  , "string one"  , "string two"

这是我的正则表达式:

\s+(\d+).(\d+)\s+,\s+(\d+).(\d+)\s+,\s+(".*?")\s+,\s+(".*?")

现在我想使解码复杂化:字符串可以存在与否 示例:

12.34,56.78
12.34,56.78,"string one"
12.34,56.78,"","string two"

如何修改我的正则表达式?

2 个答案:

答案 0 :(得分:1)

您可以使用可选的非捕获组来使模式的某些部分可选:

这是更新的正则表达式:

\s*(\d+)\.(\d+)\s*,\s*(\d+)\.(\d+)\s*(?:,\s*(".*?"))?(?:\s*,\s*(".*?"))?
                                     ^^^           ^^^^^               ^  

请参阅demo

答案 1 :(得分:0)

使用类似的东西:

(\s*(\d+\.\d+|"[^"]*")\s*,\s*)*(\s*(\d+\.\d+|"[^"]*")\s*)
  • 第一部分(\s*(\d+\.\d+|"[^"]*")\s*,\s*)*用于匹配以逗号结尾的字词。
  • 最后一部分(\s*(\d+\.\d+|"[^"]*")\s*)匹配最后一个元素(无逗号)。
  • 中间的|是更改,意味着匹配数字格式或字符串格式。
  • "[^"]*"表示首先匹配报价,然后匹配不是引号的任意数量的字符,然后匹配另一个引号(您的字符串格式)。

请参阅https://regex101.com/r/jS4sX9/1