我有兩種型別的文本,我需要從中提取名稱
1 #PRESTIGE COOKTOP 3B 6995.00/
3 #PRESTIGE SS DLX ALPHA 2250.00/
通過使用以下運算式,我可以提取第一個但不能提取第二個。
我用
(?'SrNo'\d )\s (?'Itemname'#([A-Z\s.*-]*)[\d]{1}[A-Z\s.*-]*)\s (?'MRP'[0-9.]*)
uj5u.com熱心網友回復:
您可以使用
(?'SrNo'\d )\s (?'Itemname'#(\D*?)(?:\s (\d[A-Z\s.*-]*?))?)\s (?'MRP'\d[\d.]*)
請參閱正則運算式演示。詳情:
(?'SrNo'\d )- “SrNo”組:一位或多位數字\s- 一個或多個空格(\h如果您想保持在同一行,請使用)(?'Itemname'#(\D*?)(?:\s (\d[A-Z\s.*-]*?))?)- 組“Itemname”:,#第 3 組:盡可能少的零個或多個非數字字符,然后可選出現一個或多個空格,然后是第 4 組:一個數字,然后是零個或多個大寫字母、空格.,*或-盡可能少的字符(.*如果您想匹配任何文本,可能應該洗掉,或者只是[...]在此處替換.*?為匹配任何文本)\s- 一個或多個空格(\h如果您想保持在同一行,請使用)(?'MRP'\d[\d.]*)- 組“MRP”:一個數字,然后是零個或多個數字或點。
uj5u.com熱心網友回復:
您必須洗掉]{1}[,否則您有 2 個字符類,其中第一個字符必須是數字,而第二個字串中的字符ALPHA不以數字開頭。
(?'SrNo'\d )\s (?'Itemname'#([A-Z\s.*-]*)[\d]{1}[A-Z\s.*-]*)\s (?'MRP'[0-9.]*)
^^^^^
更新的模式:
(?'SrNo'\d )\s (?'Itemname'#([A-Z\s.*-]*)[\dA-Z\s.*-]*)\s (?'MRP'[0-9.]*)
正則運算式演示
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/358701.html
下一篇:JSRegex-非捕獲可選引號
