我有一个字符串s = "a{asdfgh{asf}xvc}defg}des}"
我想使用正则表达式提取部分"{asdfgh{asf}xvc}"
。
我使用了正则表达式匹配
p = re.compile('(\{[\w|\W]+?\})')
但会提取"{asdfgh{asf}"
。
提取部件"{asdfgh{asf}xvc}"
的正确正则表达式是什么。
此外: 我要问的是'}'字符的第二次出现匹配。 我怎样才能匹配第n次出现。
答案 0 :(得分:1)
试试这个......
>>> import re
>>> s = 'a{asdfgh{asf}xvc}defg}des}'
>>> p = re.compile('(\{[\w|\W]+?\}.+?\})')
>>> print p.findall(s)
['{asdfgh{asf}xvc}']
如果您需要再匹配一个,只需将.+?\}
附加到re。
>>> p = re.compile('(\{[\w|\W]+?\}.+?\}.+?\})')
>>> print p.findall(s)
['{asdfgh{asf}xvc}defg}']
>>>
答案 1 :(得分:0)
您可以使用此正则表达式
\{.*?\{[^{}]*\}.*?\}
第N次出现
(\{[^}{]*){N}[^{}]*([^{}]*\}){N}
取值
N = 1的将匹配{xyz}
将匹配{x{y}z}
答案 2 :(得分:0)
要在第一个}
之后搜索{
的第二次出现,请按以下方式构建RE:
{<non-} text>
} <non-} text>
}
将<non-} text>
表达为[^}]*
,我们得到:
{[^}]*}[^}]*}
如果您需要将{}{}
与{{}}
区分开来,事情会变得更复杂。一般来说,RE不是处理嵌套的好工具:有一个深刻的数学结果就是这样。任何所谓的解决方案都是一个很快就会过于复杂的问题。但是,如果您知道您的括号模式是什么样的,并且您只想进入第二个}
,那么就可以了。
答案 3 :(得分:0)
要从{
匹配到}
的第二个外观,您可以使用
\{(?:[^}]*\}){2}
要从{
匹配到}
的第n个外观,您可以使用
\{(?:[^}]*\}){n}
其中(?:[^}]*\})
是非捕获组,{n}
表示必须连续多次出现以产生匹配。