簡體   English   中英

如何在 python 中使用正則表達式跳過字符串中 2 個字符之間的字符?

[英]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.

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