我想为这段文字创建一个正则表达式:
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"
如何修改我的正则表达式?
答案 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*)
匹配最后一个元素(无逗号)。 |
是更改,意味着匹配数字格式或字符串格式。 "[^"]*"
表示首先匹配报价,然后匹配不是引号的任意数量的字符,然后匹配另一个引号(您的字符串格式)。