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