[英]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 ”分隔符之間提取單詞/字符。 這樣我就會得到一個輸出' - '
在這里我試過
import re
re.search('Running Hrs(.*)\t', my_text[2].strip()).group(1)
輸出
' - \tPort M/E RPM '
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()
如果你願意-
因此,我建議在group(1)
的結果中使用 strip 。
如果\\t是文檔本身的分隔符,並且除了末尾的\\t
之外沒有其他出現的\\t
,則在整行上使用 strip 將刪除它,並且模式將不匹配。
而不是使用非貪婪的.*?
您可以使用否定字符類[^
代替,匹配除制表符或換行符以外的任何字符。
Running Hrs([^\t\r\n]+)\t
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.