[英]Regex, extract word before and after another one
您好,我在使用正則表達式從文本中提取特定單詞時遇到問題。 線路:
limk ab1
limk ab2 helo
rest helo
ab3 limk helo
ab4 limk
僅當limk
在我要查找的單詞之前或之后,並且如果limk
在它之前應該limk
,如果它的在后-應該在行的末尾,則我需要3個字母單詞作為輸出。 在這一行中,我只需要尋求潛伏和價值。
預期輸出:
ab1
ab4
我的正則表達式:
r'(^[0-9a-zA-Z]{3} \blimk\b)|(\blimk\b [0-9a-zA-Z]{3}$)'
有人可以解釋我該如何糾正? 謝謝
您可以使用
(?m)^(?:limk\s+([a-zA-Z0-9]{3})|([a-zA-Z0-9]{3})\s+limk)$
參見regex演示 。
細節
(?m)
-使錨點與換行符匹配 ^
-一行的開始 (?:
-啟動一個不捕獲容器的組(將錨應用於所有替代方案):
limk
行尾的limk
\\s+
-1+空格 ([0-9a-zA-Z]{3})
-捕獲第1組:三個字符 |
- 要么
([0-9a-zA-Z]{3})
-捕獲第2組:三個字母 \\s+
-1+空格 limk
-一個limk
字 )
-分組結束 $
-字符串結尾。 Python代碼 :
import re
rx = re.compile(r"^(?:limk\s+([a-zA-Z0-9]{3})|([a-zA-Z0-9]{3})\s+limk)$", re.M)
s = "limk ab1\nlimk ab2 helo\nrest helo\nab3 limk helo\nab4 limk"
print (["{}{}".format(x,y) for x,y in rx.findall(s)])
# => ['ab1', 'ab4']
^([0-9a-zA-Z]{3})\s+limk$|^limk\s+([0-9a-zA-Z]{3})$
編碼:
import re
s = """limk ab1
limk ab2 helo
rest helo
ab3 limk helo
ab4 limk"""
matches = [x[0] if x[0] != '' else x[1] for x in re.findall(r'(?m)^([0-9a-zA-Z]{3})\s+limk$|^limk\s+([0-9a-zA-Z]{3})$', s)]
for match in matches:
print(match)
打印:
ab1
ab4
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.