我需要檢查一個字符串是否匹配這個特定的模式。模式是:(數字)(允許所有字符)(數字)并且數字可能有逗號(“?!被颉埃保?!例如,輸入可以是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
在等式中添加單詞(例如),則需要修改表達式。

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 次以上與第一個模式相同
添加回答
舉報
0/150
提交
取消