簡體   English   中英

如何使用 regex/java 在某個字符之后提取字符串的結尾?

[英]How to extract the end of an string after a certain character with regex/java?

我要解析多行文本,例如,如下所示:

{"Name":"pathology[876]", "cpu":"0.58","mem":"18.39", "vm":"1542.14"}
{"Name":"/opt/pathology/bin/pathology[876]", "cpu":"0.58","mem":"18.39", "vm":"1542.14"}
{"Name":"/usr/sbin/ofonod[760]", "cpu":"0.00","mem":"0.00", "vm":"0.00"}
{"Name":"/opt/networking/bin/network_manager[370]", "cpu":"0.20","mem":"53.43", "vm":"4225.69"}
{"Name":"/usr/bin/dmrouterd[913]", "cpu":"0.00","mem":"0.00", "vm":"0.00"}

我必須提取每個進程名稱,但有些是單獨出現的,以及我必須忽略的相關路徑,例如: pathology[876]/opt/pathology/bin/pathology[876]相同。 我必須概括此過程以將進程名稱與路徑無關。 我怎樣才能在字符串的最后一個/和結尾之間獲取所需的字符串?

到目前為止,我已經計算了以下正則表達式,它處理如下路徑: /opt/<anything>/bin/<anything>在 bin/ 之后提取部分,但存在路徑較長的問題,例如/opt/<anything>/bin/pat/pathology[876]我得到pat/pathology[876]而我只想要pathology[876]

"(Name)":("\/opt\/(.*?)\/bin\/(.*?)"|"(.*?)")

這將為您做到:

[^\/"]+(?=", "cpu")

用英語講:

每行,找到所有不是正斜杠也不是雙引號導致", "cpu"

https://regex101.com/r/u3rhUf/1/

我創建此類正則表達式的步驟是:

  1. 考慮我的目標字符串中(不)包含哪些字符? 在這種情況下,允許使用所有字符,但不允許使用 " 和 /: ([^/\"]+)
  2. 我的目標字符串之前寫了什么? 在這種情況下,像 /.../.../ 這樣的可選字符串總是以 / 開頭和結尾。 要捕獲所有../../../,我們可以編寫([^"\/]+\/)*並捕獲第一個 / 並使其可選,我們只需將其擴展為(\/([^"\/]+\/)*)?
  3. 我的目標字符串后面寫的是什么? ->“

最終的正則表達式可能是:

"Name":"(?:\/(?:[^"\/]+\/)*)?([^/\"]+)"

(注意語法(?:X)將對表達式 X 進行分組,但不會被捕獲為“結果組”)

我在這里測試並保存了這個正則表達式: https://regex101.com/r/WnSNNk/2

暫無
暫無

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

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