regex 简单的正则表达式-将组带到最后一个逗号

rnmwe5a2  于 7个月前  发布在  其他
关注(0)|答案(2)|浏览(72)

可能是简单的东西,但我不太使用正则表达式。
输入:c1 = 7634, c2 = a,b, c3 = 8gd_, c4 = e,78
所需输出:

c1 = 7634
c2 = a,b
c3 = 8gd_
c4 = e,78

字符串
复杂度(对我来说)-我不知道如何定义它,所以对于c2,它需要a,B和逗号。我现在有:

(\w+)\s*=\s*((?:[^,].*?[^,])?)


跟在B后面
谢谢提前!

v440hwme

v440hwme1#

您可以使用

(\w+)\s*=\s*(.*?)(?=\s*,\s*\w+\s*=|$)

字符串
参见regex demo

  • 详情 *:
  • (\w+)-第1组:一个或多个单词字符
  • \s*=\s*-=符号,包含零个或多个空格
  • (.*?)-第2组:除尽可能少的换行符字符之外的任何零个或多个字符
  • (?=\s*,\s*\w+\s*=|$)-在可选空格内紧跟逗号+一个或多个单词字符,零个或多个空格,以及=符号或字符串结束。

$之前添加\s*,如果可以有尾随空格。

w8rqjzmb

w8rqjzmb2#

您可以使用此正则表达式搜索2个捕获组:

(\w+)\h*=\h*(.*?)(?=\h*,\h*\w+\h*=|$)

字符串
RegEx Demo

RegEx详情:

  • (\w+):匹配捕获组#1中的1个以上单词字符-\h*=\h*:匹配=,两侧用0个或多个空格包围
  • (.*?):匹配捕获组#2中的0个或多个字符
  • (?=\h*,\h*\w+\h*=):正向前看:Assert我们在当前位置前面有逗号,逗号由0个或多个空格包围,然后是1+单词字符,后面是0个或多个空格和=

如果你的键名允许非单词字符,如连字符,$#等,那么使用这个正则表达式:

([^=,\h]+)\h*=\h*(.*?)(?=\h*,\h*[^=,\h]+\h*=|$)

相关问题