我测试了这个正则表达式
(?<=\))(.+?)(?=\()|(?<=\))(.+?)\b|(.+?)(?=\()
但它不适用于此模式(ef)abc(gh)
之类的字符串。
我得到了这样的结果"(ef)abc"
。
但这3个正则表达式(?<=\))(.+?)(?=\()
,(?<=\))(.+?)\b
,(.+?)(?=\()
为"(ef)abc(gh)"
,"(ef)abc"
,"abc(ef)"
单独工作。
任何人都可以告诉我问题在哪里或者我如何得到预期的结果?
答案 0 :(得分:0)
假设您希望匹配括号中元素之间的文本,请尝试以下方法:
^(?:\(\w*\))?([\w]*)(?:\(\w*\))?$
^ - beginning of string
(?:\(\w*\))? - non-capturing group, match 0 or more alphabetic letters within parens, all optional
([\w]*) - capturing group, match 0 or more alphabetic letters
(?:\(\w*\))? - non-capturing group, match 0 or more alphabetic letters within parens, all optional
$ - end of string
您尚未指定可能使用的语言,但以下是Python中的示例:
>>> import re
>>> string = "(ef)abc(gh)"
>>> string2 = "(ef)abc"
>>> string3 = "abc(gh)"
>>> p = re.compile(r'^(?:\(\w*\))?([\w]*)(?:\(\w*\))?$')
>>> m = re.search(p, string)
>>> m2 = re.search(p, string2)
>>> m3 = re.search(p, string3)
>>> print m.groups()[0]
'abc'
>>> print m2.groups()[0]
'abc'
>>> print m3.groups()[0]
'abc'
答案 1 :(得分:0)
答案 2 :(得分:0)
你的问题是(.+?)(?=\()
匹配&#34;(ef)abc&#34; in&#34;(ef)abc(gh)&#34;。
解决此问题的最简单方法是更明确地了解您要查找的内容。在这种情况下,通过交换&#34;任何角色&#34; .
,&#34;任何不是括号的字符&#34; [^\(\)]
。
(?<=\))([^\(\)]+?)(?=\()|(?<=\))([^\(\)]+?)\b|([^\(\)]+?)(?=\()
更清洁的正则表达式
(?:(?<=^)|(?<=\)))([^\(\)]+)(?:(?=\()|(?=$))