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

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

如何以這種方式匹配字符串?

如何以這種方式匹配字符串?

蠱毒傳說 2022-01-12 10:17:03
我需要檢查一個字符串是否匹配這個特定的模式。模式是:(數字)(允許所有字符)(數字)并且數字可能有逗號(“?!被颉埃保?!例如,輸入可以是500+400或400,021+213.443。我試過了Pattern.matches("[0-9],?.?+[0-9],?.?+", theequation2),但是沒有用!我知道我必須使用方法 Pattern.match(regex, String),但我無法找到正確的正則表達式。
查看完整描述

2 回答

?
拉莫斯之舞

TA貢獻1820條經驗 獲得超10個贊

處理數字可能很困難。這種方法將處理您的示例,但請仔細檢查。我也沒有在中間分組中做“所有字符”,因為“所有”將包括數字,所以我認為找到下一個非數字是合適的。

此 Java 正則表達式處理要求:

"((-?)[\\d,.]+)([^\\d-]+)((-?)[\\d,.]+)"

但是,上面有一個潛在的問題??紤]以下幾點: 300 - -200. 上述情況與這種情況不符。

現在,根據這些示例,我認為重點是應該有一個有效的運算符。數學運算的數量可能有限,因此我會將中間的運算符列入白名單。因此,類似:

"((-?)[\\d,.]+)([\\s]*[*/+-]+[\\s]*)((-?)[\\d,.]+)"

會,我認為,更合適。該[*/+-]可為電力運營商進行擴展^或什么的。現在,如果要開始mod在等式中添加單詞(例如),則需要修改表達式。

你可以在這里看到這個正則表達式


查看完整回答
反對 回復 2022-01-12
?
12345678_0001

TA貢獻1802條經驗 獲得超5個贊

在您正則表達式,你必須逃脫點\.字面匹配它,逃離\+否則會使?一個占有欲量詞。要匹配 1+ 位,您必須使用量詞[0-9]+

對于您的示例數據,您可以匹配 1+ 個數字,后跟一個可選部分,該部分匹配開頭和結尾的點或逗號。如果您想匹配任何字符 1 次,您可以使用點。

除了使用點之外,您還可以使用例如字符類[-+*]來列出一些運算符或列出您允許匹配的內容。如果這應該是唯一的匹配項,您可以使用錨點來斷言字符串的開頭^和結尾$

\d+(?:[.,]\d+)?.\d+(?:[.,]\d+)?

在 Java 中:

String regex = "\\d+(?:[.,]\\d+)?.\\d+(?:[.,]\\d+)?";

正則表達式演示

那將匹配:

  • \d+(?:[.,]\d+)?1+ 數字后跟可選部分匹配.,后跟 1+ 數字

  • .匹配任何字符(使用 . +)重復 1 次以上

  • 與第一個模式相同


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

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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