簡體   English   中英

單引號之間的python regex findall()子字符串

[英]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.

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