亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何在 Java RegEx 中匹配組中的轉義字符

如何在 Java RegEx 中匹配組中的轉義字符

浮云間 2022-12-15 15:57:03
我最近在用 java 開發一個命令行項目,我需要通過命令進行解析。但是我在匹配這個特定命令時遇到了問題。15.00|GR,LQ,MD "Uber"其中金額可以是小數部分 2 或 int。我需要收集有關組的所有信息?!皟灢健笔且粋€可選的描述。這是我試過的..Pattern.compile("?([\\d]+(\\.[\\d]{2})?\\|([A-Z]{2}){1})(,[A-Z]{2})*\\s(\\\".+\\\")?$");我期望的是獲得號碼,由兩個字符組成的用戶以及可選的描述......
查看完整描述

3 回答

?
素胚勾勒不出你

TA貢獻1827條經驗 獲得超9個贊

您的正則表達式分析:


"?([\\d]+(\\.[\\d]{2})?\\|([A-Z]{2}){1})(,[A-Z]{2})*\\s(\\\".+\\\")?$"

首先,讓我們將 Java 字符串文字反轉義為實際的正則表達式字符串:


?([\d]+(\.[\d]{2})?\|([A-Z]{2}){1})(,[A-Z]{2})*\s(\".+\")?$

現在讓我們把它分開:


?                  Incorrect character '?', should be '^'

                   Match start of input, but your input starts with '['

(                  

  [\d]+            The '[]' is superfluous, use '\d+'

  (\.[\d]{2})?     Don't capture this, use '(?:X)?'

  \|

  ([A-Z]{2}){1}    The '{1}` is superfluous, and don't capture just this

)                  You're capturing too much. Move back to before '\|'

(,[A-Z]{2})*       Will only capture last ',XX'.

                   Use a capture group around all the letters, then split that on ','

\s

(\".+\")?          No need to escape '"', and only capture the content

$                  Match end of input, but your input ends with ']'

因此,清理后它將是:


^\[

(

  \d+

  (?:\.[\d]{2})?

)

\|

(

  [A-Z]{2}

  (?:,[A-Z]{2})*

)

\s

(?:"(.+)")?

\]$

一起回來:


^\[(\d+(?:\.[\d]{2})?)\|([A-Z]{2}(?:,[A-Z]{2})*)\s(?:"(.+)")?\]$

使用[15.00|GR,LQ,MD "Uber"]將捕獲的輸入:

  1. 15.00- 全數

  2. GR,LQ,MD-split(",")用于獲取數組{ "GR", "LQ", "MD" }

  3. Uber- 只是沒有引號的文字

請參閱regex101.com 上的演示。


查看完整回答
反對 回復 2022-12-15
?
回首憶惘然

TA貢獻1847條經驗 獲得超11個贊

第一個字符是 a?而不是^。除此之外,您應該將第一組更改([\d]+(\.[\d]{2})?)為 get only15.00和 not 15.00|GR。

完整示例如下所示:

Pattern.compile("^([\\d]+(\\.[\\d]{2})?)\\|(([A-Z]{2})(,[A-Z]{2})*)\\s(\".+\")?$");


查看完整回答
反對 回復 2022-12-15
?
qq_花開花謝_0

TA貢獻1835條經驗 獲得超7個贊

有兩個主要問題。

  • ?字符是重音抑揚符而不是^插入符號。

  • 您沒有在正則表達式中包含方括號。

一個可能的解決方案可能是這樣的

Pattern.compile("^\\[(?<number>[\\d]+(?>\\.[\\d]{2})?)\\|(?<codes>(?>[A-Z]{2},?)+)(?>\\s\\\"(?<comment>.+)\\\")?\\]$");

該解決方案還命名了捕獲組,這使得指定您希望從哪個組獲取價值變得更好。https://regex101.com/r/HEboNf/2

所有三個 2 字母代碼都分組在一個捕獲組中,您可以在代碼中用逗號分隔它們。


查看完整回答
反對 回復 2022-12-15
  • 3 回答
  • 0 關注
  • 171 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號