gpt4 book ai didi

python - 如何匹配嵌套字符串而不是单独的字符串

转载 作者:太空宇宙 更新时间:2023-11-03 17:47:15 27 4
gpt4 key购买 nike

我正在尝试匹配正则表达式,以便

hello ?color red ?name Yuri ? ? to the forum

将输出

?color red ?name Yuri ? ?

请注意,命令的开头始终为 (? + 至少一个字母),命令的结尾始终为 (? + 空格)

我尝试使用以下正则表达式:

/\?[^ ](.)*\?/g

但是,如果我们有这个输入:

hello ?name Yuri ? welcome to ?forum Python ? It's awesome!

匹配:

?name Yuri ? welcome to ?forum Python ?

但是,它应该单独匹配(即 [?name Yuri ? , ?forum Python ?] )

请帮忙!同样,命令始终以 ?+letter 开头并以 ?+whitespace 结尾

更新1:

但是,输出是 ['?color red ?name Yuri ? '] 应该是 ['?颜色红色?名字尤里? ? '](两个问号)注意 嵌套可以是无限的,即 ?name ?name ?color ?color ? ? ? ?

所以这个想法是拥有 ?command ?代表函数调用,所以假设我们有“?add 2 ?multiply 3 3 ? 5 ?” -> 它应该执行“?乘 3 3 ?”它返回 9,然后执行“?add 2 9(我们从返回中得到)5 ?”加起来是 16

更新2:

Avinash 在更新 2 中的回答非常有效!

最佳答案

您需要使用非贪婪的正则表达式。

>>> import re
>>> s = "hello ?name Yuri ? welcome to ?forum Python ? It's awesome!"
>>> re.findall(r'\?[a-zA-Z].*?\?\s', s)
['?name Yuri ? ', '?forum Python ? ']

如果您不想打印最后一个空格,则添加一个正向前瞻断言。

>>> re.findall(r'\?[a-zA-Z].*?\?(?=\s)', s)
['?name Yuri ?', '?forum Python ?']

更新:

>>> re.findall(r'\?[A-Za-z](?:\?[^?\n]*\?|[^?\n])*?\?\s', 'hello ?color red ?name Yuri ? ? to the forum')
['?color red ?name Yuri ? ? ']
>>> re.findall(r'\?[A-Za-z](?:\?[^?\n]*\?|[^?\n])*?\?\s', "hello ?name Yuri ? welcome to ?forum Python ? It's awesome!")
['?name Yuri ? ', '?forum Python ? ']

DEMO

更新2:

>>> import regex
>>> regex.findall(r'\?(?:(?R)|[^?])*\?', 'hello ?color ?size 22 red ?name Yuri ? ? ? ')
['?color ?size 22 red ?name Yuri ? ? ?']
>>> regex.findall(r'\?(?=\S)(?:(?R)|[^?])*\?(?=\s)', 'hello ?color ?size 22 red ?name Yuri ? ? ? ')
['?color ?size 22 red ?name Yuri ? ? ?']

DEMO

关于python - 如何匹配嵌套字符串而不是单独的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29596625/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com