簡體   English   中英

正則表達式以

[英]Regex starts with and ends with

我有這個字符串:

[project_machine 332800MB 256256MB 23%                    
project_machine2 665600MB 512512MB 23%]

我想只取機器的名稱,取這樣的東西:

project_machine project_machine2

為此,我嘗試使用正則表達式,如下所示:

^ 用於選擇字符串的開頭 $ 用於選擇字符串的結尾(在這里,我認為空格可以解決問題)

^project+$\s

但它不匹配。

我究竟做錯了什么?

如果這實際上是一個字符串,那么它包含換行符。 您可以拆分它們以使其更容易並避免使用正則表達式。

s = """[project_machine 332800MB 256256MB 23%                    
project_machine2 665600MB 512512MB 23%]"""

m = []
for machine in s[1:-1].split('\n'):
   m.append(machine.split()[0])

machines_str = ' '.join(m)

這不在我的腦海中-盡管應該可以...

解釋:

  • s[1:-1]正在刪除第一個和最后一個 position 中的方括號。
  • split('\n')在換行符上拆分以創建字符串列表
  • 啟動一個列表並從每一行添加第一個值(機器名稱)(這里的拆分是在一個空格上拆分,這是split的默認值)
  • 加入此列表以獲取您想要的字符串

我最初是通過更復雜的列表理解來做到這一點的,但我認為這里的循環更清晰,更容易理解發生了什么。

對於這樣的事情,我真的很喜歡使用https://regex101.com/進行測試。 因為您可能不知道您的字符串是否包含數字,所以您應該在表達式中指出這一點。 此外,您的第一行不是以“project_manager”開頭,而是以“[”開頭。 如果您只想要機器的名稱,則不需要指定字符串以它開頭,只需提取術語:

project_machine\d*

\d匹配一個數字(相當於 [0-9])
*在零次和無限次之間匹配前一個令牌,盡可能多次,根據需要回饋(貪婪)

project+表示projec后跟一個或多個t 考慮到您想在[之后獲得匹配,而不是跨越到行尾^$是此任務的錯誤工具。 我建議以下方式:

import re
text = '''[project_machine 332800MB 256256MB 23%                    
project_machine2 665600MB 512512MB 23%]'''
machines = re.findall(r'project\S+', text)
print(machines)

output

['project_machine', 'project_machine2']

說明:獲取project后跟任何非空格( \S )。 注意使用所謂的原始字符串使 escaping 更容易。 有關使用re模塊使用原始字符串的討論,請參閱re docs

暫無
暫無

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

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