簡體   English   中英

Python - 捕獲文本中特定字符串后的下一個單詞

[英]Python - Capture next word after specific string in a text

我試圖只捕獲特定字符串后的 1 個單詞。 例如,

import re
my_string="I love Apple juice, it is delicious."
print(my_string.split("I love",1)[-1])

我得到結果:

Apple juice, it is delicious.

但我只需要 1 個字,之后就沒有了。

Apple 

如何刪除 Apple 之后的所有內容? 我試過rstrip ,它有效但不是最有效的方法。 謝謝。

只需使用str.split兩次,並確保使用maxsplit避免不必要的分裂:

my_string = 'I love Apple juice, it is delicious.'

res = my_string.split('I love', maxsplit=1)[-1]\
               .split(maxsplit=1)[0]

'Apple'

我會在您的正則表達式中嘗試使用積極的表情:

>>> import re
>>> my_string="I love Apple juice, it is delicious."
>>> re.search('(?<=I love )(\w+)', my_string).group(1)
'Apple'

您還可以嘗試使用正面看待的Regex組構造:

match = re.search('(?<=I love\s)\S*', 'I love Apple juice, it is delicious.')

編輯:我很想念您的問題,並更新了我的模式以匹配您的尋找。

有很多方法可以做到這一點。 您可以以最簡單的形式執行以下操作:

>>> s = 'Apple juice, it is delicious.'
>>> s.split()[0]
'Apple'

或使用功能齊全的正則表達式( import re

>>> re.search(r'^[\S]*(?!\S\s)', s)
'Apple'

您可以使用

import re
my_string="I love Apple juice, it is delicious."
print( re.findall(r"\bI\s+love\s+(\w+)", my_string) )
# => ['Apple']

請參閱Python 演示正則表達式演示 請注意re.findall返回字符串中找到的所有匹配項,並且由於模式中有一個捕獲組,因此返回的字符串將是第 1 組值。

詳情

  • \b - 單詞邊界
  • I - 一個I
  • \s+ - 一個或多個空格(如果空格是不間斷空格怎么辦? \s可以很好地處理這些情況)
  • love ——一個love的詞
  • \s+ - 一個或多個空格
  • (\w+) - 第 1 組:一個或多個字母、數字或下划線。

暫無
暫無

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

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