[英]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\/(.*?)"|"(.*?)")
我創建此類正則表達式的步驟是:
([^/\"]+)
([^"\/]+\/)*
並捕獲第一個 / 並使其可選,我們只需將其擴展為(\/([^"\/]+\/)*)?
最終的正則表達式可能是:
"Name":"(?:\/(?:[^"\/]+\/)*)?([^/\"]+)"
(注意語法(?:X)
將對表達式 X 進行分組,但不會被捕獲為“結果組”)
我在這里測試並保存了這個正則表達式: https://regex101.com/r/WnSNNk/2
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.