簡體   English   中英

正則表達式+ Python:如何用'?'查找字符串 在里面?

[英]regex + Python: How to find string with '?' in it?

我在content變量中有一個多行字符串,我需要檢索包含問號的模式uri所有匹配項。

這是我到目前為止:

content = """
/blog:text:Lorem ipsum dolor sit amet, consectetur adipisicing elit
<break>
text:Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore
<break>
text:Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia.

/blog?page=1:text:Lorem ipsum dolor sit amet, consectetur adipisicing elit
<break>
text:Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore
<break>
text:Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia.
"""

#uri = '/blog' # Works fine
uri = '/blog?page=1'
re.findall('^(?ism)%s?:(.*?)(\n\n)' % uri, content)

它工作正常,直到uri得到? 用它后的參數,我得到空列表。

任何想法如何修復正則表達式?

Python的re.escape()是你的朋友。 如果你不使用它, ? 在uri內部使用其在正則表達式中的通常含義(使前一項為0或1匹配)。

uri = '/blog?page=1'
re.findall('^(?ism)%s?:(.*?)(\n\n)' % re.escape(uri), content)

我不清楚你究竟想要什么?:%s之后做什么,所以我將它留在可能錯誤的假設中,因為它存在於某個原因。

我會保持簡單並找到可能的匹配,然后過濾掉那些包含? ,例如:

import re

candidates = (m.group(1) for m in re.finditer('^(.*?):', content, flags=re.M))
matches = [m for m in candidates if '?' in m]
# ['/blog?page=1']

我沒有看到你的兩個新行content 還有,我逃過了? 來自uri,因為它是正則表達式的角色。

uri = '/blog\?page=1'
re.findall('^(?ism)%s?:(.*?)[\n\r]' % uri, content)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM