阅读很多问题和答案,但不知道如何解决我的问题。
我有一个像这样的字符串:
23424(223)+32 -32
允许完整的字符串是:
number
)
一次
(
一次
+
一次
spaces
-
对我来说,最大的问题是在String的任何地方找到一次性字符。希望你能帮帮我。
此示例字符串不应匹配。 23424(223)3+3)2 -32
答案 0 :(得分:2)
您可以将此正则表达式用于负向前瞻:
^(?!.*\(.*\()(?!.*\).*\))(?!.*\+.*\+)[\d ()+-]+$
我们正在使用3个负向前瞻:
(?!.*\(.*\() # Negative lookahead to disallow more than one (
(?!.*\).*\)) # Negative lookahead to disallow more than one )
(?!.*\+.*\+) # Negative lookahead to disallow more than one +
在Java中使用:
String regex = "^(?!.*\\(.*\\()(?!.*\\).*\\))(?!.*\\+.*\\+)[\\d ()+-]+$";
答案 1 :(得分:0)
你可以在没有正则表达式的情况下解决它,只需遍历字符串,然后将每个字符放在具有此逻辑的地图中
if(map.get(str.charAt(i)) == null)
map.put(str.charAt(i),1)
else
map.put(str.charAt(i),map.get(str.charAt(i))+1)
完成循环后,检查地图中的每个时间字符,看看哪一个出现多次