[英]Python regex findall() substrings between single apostrophes
所以我需要捕獲兩個單撇號之間的字符串中的子字符串。
對於此示例,我具有字符串:
這部電影真正的問題不是“誰? ' 但為什么 ? '
我當前得到的輸出是:[[“'who?'”],[],[]]
我想讓正則表達式捕捉“為什么? ”,但我不知道為什么它不起作用。
這是我的正則表達式
pattern = re.compile(r"(\s+[\']{1}\D{2,}[^\']+[\']{1} | ^[\']{1}\D{2,}[^\']+[\']{1}$)")
我有\\ D的原因是我不想捕獲'70年代,並且我至少需要2個字符,因為我不想捕獲'n in rock'n roll。 我想添加[^ \\']是因為在捕獲完整的“誰?”之前 ' 但為什么 ? '但是我需要'誰? ”和“為什么?” 是單獨的比賽。 任何建議都會有所幫助,在此先感謝。
為了輕松避免特殊情況,我建議您進行一些預處理以使正則表達式更容易。
首先刪除'70
或'n
類的字符串(后跟空格),然后通過簡單引號之間的非貪婪匹配即可輕松實現。
我更改了輸入字符串,以引入“數字和搖滾”。
import re
s = "the real question this '70 rock 'n roll movie poses is not 'who ? ' but 'why ? '"
s = re.sub(r"'(\d+|\w\s)","",s)
print(re.findall("'.*?'",s))
印刷品:
["'who ? '", "'why ? '"]
如果您有更多反例,則使用類似的替換技術將其刪除要比不匹配它們容易得多。
您可以使用
re.findall(r"(?<!\S)'([^\d\s']{2,}[^']*)'", text)
細節
(?<!\\S)
-空格或字符串開頭應在 '
-一個'
字符 ([^\\d\\s']{2,}[^']*)
-組1:2個或更多字符(數字,空格和單引號除外),然后除0以外'
任何0+字符 '
-一個'
字符。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.