簡體   English   中英

正則表達式匹配兩個字符串,字符串之間有給定數量的單詞

[英]Regex match two strings with given number of words in between strings

我想匹配包括兩個字符串和兩個字符串之間的字符。 (對於他們之間可接受的給定數量的單詞)

例如:

text = 'I want apples and oranges'
參數是'apples''oranges'k=2 ,這是這些字符串單詞之間允許的最大單詞數。 我期待 output 是'apples and oranges' ,因為兩個給定字符串之間只有一個詞

這與正則表達式中的(?<=...)模式非常相似,但我無法定義介於兩者之間的可接受單詞的數量,我希望提取相關文本而不是介於兩者之間

我現在擁有的:

import re
text = 'I want apples and oranges'
pattern = "(?<=apples)(.*)(?=oranges)"
m = re.search(pattern, text)
print(m)

<re.Match object; 跨度=(13, 18),匹配='和'>

這將輸出' and ' 但我想得到apples and oranges的 output ,而不是只介於兩者之間。 而且我希望能夠限制蘋果和橙子之間可接受的單詞數量。 例如,如果我定義k = 2並且句子是“我想要蘋果和一些橙子”,這不應該匹配,因為蘋果和橙子之間有 3 個單詞。

有誰知道我是否也可以用正則表達式做到這一點?

你可以使用類似的東西

import re
text = 'I want apples and oranges'
k = 2
pattern = f"apples(?:\s+\w+){{0,{k}}}\s+oranges"
m = re.search(pattern, text)
if m:
    print(m.group())

# => apples and oranges

在這里,我使用\w+來匹配一個單詞。 如果單詞是非空白塊,則需要使用

pattern = f"apples(?:\s+\S+){{0,{k}}}\s+oranges"

請參閱此 Python 演示

如果您需要添加單詞邊界,則需要研究以特殊字符開頭或結尾的單詞的單詞邊界會產生意想不到的結果,並使用動態正則表達式帖子匹配字符串中的整個單詞 對於當前示例, fr"\bapples(?:\s+\w+){{0,{k}}}\s+oranges\b"將起作用。

該模式看起來像apples(?:\s+\w+){0,k}\s+oranges並匹配

  • apples - apples
  • (?:\s+\w+){0,k} - 一個或多個空格和一個或多個單詞字符的零到k次重復
  • \s+ - 一個或多個空格
  • oranges oranges串。

暫無
暫無

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

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