簡體   English   中英

提取單詞和分隔符之間的單詞python

[英]Extract words between a word and a delimiter python

我從 word 文檔(.doc)中提取了一些文本數據並存儲在一個變量my_text ,這樣

my_text[2] = '2 Running Hrs                         -  \tPort M/E RPM  \t-  \t'

這里\\t是文檔本身的分隔符。 我正在嘗試在單詞“ Running Hrs ”和“ \\t ”分隔符之間提取單詞/字符。 這樣我就會得到一個輸出' - '
在這里我試過

  1. 試驗 1

import re
re.search('Running Hrs(.*)\t', my_text[2].strip()).group(1)

輸出

 '                         -  \tPort M/E RPM  '
  1. 試驗 2

print(re.findall(r'\Running Hrs([^]\t*)\]', str(my_text[2])))

輸出

ERROR: error: bad escape \R

對此有任何建議。

您的第一次嘗試與您想要的非常接近,因為您只需要包含一個? 標志以確保您的捕獲組是非貪婪的,如下所示:

r'Running Hrs(.*?)\t'

沒有這個? 標志,您的捕獲組被認為是貪婪的,並且會嘗試盡可能多地匹配到最后一個\\t ,而非貪婪的表達式只會捕獲到第一個\\t

你可以在你的代碼中使用這樣的東西

start_phrase = 'Running Hrs'

start = my_text[2].index(start_phrase)+len(start_phrase)
end = my_text[2].index('\t')

my_text[2][start:end].strip()

您的正則表達式幾乎是正確的,但匹配盡可能多的字符(貪婪行為)。 要獲得最少的匹配字符,您可以使用 '?' 將行為設置為非貪婪。 表達。

在提取開始模式和 '/t' 之間的文本后,還要執行 .strip() 以刪除剩余的空白。

my_text[2] = '2 Running Hrs                         -  \tPort M/E RPM  \t-  \t'

import re
re.search('Running Hrs(.*?)\t', my_text[2]).group(1).strip()

見: https : //docs.python.org/3/library/re.html

如果你願意-因此,我建議在group(1)的結果中使用 strip 。

如果\\t是文檔本身的分隔符,並且除了末尾的\\t之外沒有其他出現的\\t ,則在整行上使用 strip 將刪除它,並且模式將不匹配。

而不是使用非貪婪的.*? 您可以使用否定字符類[^代替,匹配除制表符或換行符以外的任何字符。

Running Hrs([^\t\r\n]+)\t

正則表達式演示| Python 演示

import re

my_text = '2 Running Hrs                         -  \tPort M/E RPM  \t-  \t'
print(re.search('Running Hrs([^\t\r\n]+)\t', my_text).group(1).strip())

輸出

-

暫無
暫無

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

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