正则表达式用括号外的逗号分割字符串,并具有多个级别的python
我在 python 中有一个这样的字符串
filter="eq(Firstname,test),eq(Lastname,ltest),OR(eq(ContactID,12345),eq(ContactID,123456))"
rx_comma = re.compile(r"(?:[^,(]|\([^)]*\))+")
result = rx_comma.findall(filter)
实际结果是:
['eq(Firstname,test)', 'eq(Lastname,ltest)', 'OR(eq(ContactID,12345)', 'eq(ContactID,123456))']
预期结果是:
['eq(Firstname,test)', 'eq(Lastname,ltest)', 'OR(eq(ContactID,12345),eq(ContactID,123456))']
感谢任何帮助。
I have a string like this in python
filter="eq(Firstname,test),eq(Lastname,ltest),OR(eq(ContactID,12345),eq(ContactID,123456))"
rx_comma = re.compile(r"(?:[^,(]|\([^)]*\))+")
result = rx_comma.findall(filter)
Actual result is:
['eq(Firstname,test)', 'eq(Lastname,ltest)', 'OR(eq(ContactID,12345)', 'eq(ContactID,123456))']
Expected result is:
['eq(Firstname,test)', 'eq(Lastname,ltest)', 'OR(eq(ContactID,12345),eq(ContactID,123456))']
Any help is appreciated.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
OP的问题已经通过使用
regex
模块解决了,我想介绍一下 pyparsing 作为此处的替代解决方案。可以通过以下命令安装:代码:
说明:
关键点是上面代码中的
expr
。我对其定义添加了一些解释性注释,如下:The OP's issue was already solved by using the
regex
module though, I'd like to introduce pyparsing as an alternative solution here. It can be installed by the following command:Code:
Explanation:
The key point is the
expr
in the above code. I added some explanatory comments to its definition as follows:使用 PyPi 正则表达式模块,您可以使用类似
输出的代码:
请参阅Python 和正则表达式演示。
详细信息:
(\((?:[^()]++|(?1))*\))
- 第 1 组捕获嵌套配对括号之间的字符串|
- 或,
- a逗号。With PyPi regex module, you can use the code like
Output:
See the Python and the regex demo.
Details:
(\((?:[^()]++|(?1))*\))
- Group 1 capturing a string between nested paired parentheses(*SKIP)(*F)
- the match is skipped and the next match is searched for from the failure position|
- or,
- a comma.