正在努力解决SO中发布的正则表达式问题,但却被这个问题困住了。
来自此字符串
Ob=Web technology,OB=Product SPe,OB=Dev profile,OB=Computer Management,oB=Hardware Services,cd=sti,CD=com,cd=ws
必须删除以下值。
Web technology,Product SPe,Dev profile,Computer Management,Hardware Services
我正在尝试下面的正则表达式。
(?=Ob)(?:(\w+=)([\w\s]+,?))+
我的假设是group 1
应该包含所有键,而group 2
应该包含所有值。但是除了最后一个键值对之外的所有其他值都被分配到group 0
。
有没有办法让所有值都到group 2
?
答案 0 :(得分:1)
,?cd=.*?(?:,|$)|ob=
试试这个。empty string
。请参阅演示。不要忘记标记i
。
http://regex101.com/r/lZ5mN8/59
或
cd=.*?(?:,|$)|[^=,]+=(.*?)(?=,|$)
试试这个。$1
。见。演示。
答案 1 :(得分:1)
正则表达式的问题是group 1
和group 2
包含在非捕获组中。这导致整个正则表达式被group 0
捕获。而另一件事是积极的前瞻阻止了正则表达式进行全局匹配。
以下正则表达式会将所有keys
收集到group 1
和values
到group 2
。
(\w+)=([\w\s]+)(?=[,\s]+)
检查它是如何works here的。
答案 2 :(得分:0)
正则表达式:
(?i)Ob=([^,]+)|(?!.*\bob\b).+
替换字符串:
$1
(?i)
将进行不区分大小写的匹配。Ob=([^,]+)
组索引1包含所有Ob值。|
或(?!.*\bob\b).+
匹配任何字符一次或多次,但不会包含\bob\b
答案 3 :(得分:0)