![](/img/trans.png)
[英]How to use regex in python in getting a string between two characters?
[英]how to skip the characters between 2 characters in a string using regex in python?
我有一個多行文件,其中一行是:
node:milk1-01|name=milk1-01
所以我需要解析這個文件以使用如下藍圖搜索這一行:
node:________|name=________
試圖在正則表達式中實現它並感到困惑。 在從文件中讀取每一行的循環中使用了以下代碼段。
x = re.findall('node:'+'\w+[-]*\d*'+'\\|name='+'\w+-\d*', line)
print(x)
這個概念很新。 難道我做錯了什么? 感謝所有幫助。 謝謝。
這可能類似於您正在尋找的東西嗎?
>>> import re
>>> line = 'not\nhere\nnode:milk1-01|name=milk1-01\nsomething\n'
>>> re.findall(r'node:.*\|name=.*', line)
['node:milk1-01|name=milk1-01']
你很接近,正則表達式也可以包含純文本。 因此無需像您那樣連接字符串,此外,您似乎在嘗試中將字母和數字分開。 但是您提供的藍圖並不清楚這是否真的有必要,最后您實際上並沒有捕獲比賽的任何部分。 你只檢查它是否在那里。
import re
line = "node:milk1-01|name=milk1-01"
my_regex = re.compile('node:(.+)\|name=(.+)')
matches = re.findall(my_regex, line)
print(matches)
>>> [('milk1-01', 'milk1-01')]
有幾點需要注意:
(...)
:括號是一個捕獲組。 有兩組,捕捉兩個不同的部分。
.+
: .
匹配任何字符; 所以字母數字連字符和其他(可讀)字符。 +
表示捕獲一個或多個“它們”,即正則表達式中的前一個字符。 但你已經明白了。
最后的專業提示:使用Regex101 之類的服務來構建正則表達式並對其進行故障排除。 您可以在屏幕上實時看到發生了什么。
采用
re.findall(r'node:[^|]*\|name=[^|]*', line)
見證明
解釋
EXPLANATION
--------------------------------------------------------------------------------
node: 'node:'
--------------------------------------------------------------------------------
[^|]* any character except: '|' (0 or more times
(matching the most amount possible))
--------------------------------------------------------------------------------
\| '|'
--------------------------------------------------------------------------------
name= 'name='
--------------------------------------------------------------------------------
[^|]* any character except: '|' (0 or more times
(matching the most amount possible))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.