0

在 Java 中,我将使用什么正则表达式来匹配只有一个冒号的字符串并确保冒号出现在任何空格之前?

例如,它应该匹配这些字符串:

label: print "Enter input"
But: I still had the money.
ghjkdhfjkgjhalergfyujhrageyjdfghbg:
area:54

但不是

label: print "Enter input:"
There was one more thing: I still had the money.
ghfdsjhgakjsdhfkjdsagfjkhadsjkhflgadsjklfglsd
area::54
4

4 回答 4

3

如果你使用它matches(需要匹配整个字符串),你可以使用

[^\\s:]*:[^:]*

这意味着:任意多个非whitespace, 非:字符,然后是 a :,然后是任意多个非:字符。

我真的只使用了两个正则表达式概念:(否定)字符类重复

如果您想在 之前或之后至少需要一个字符:,请将对应的字符*替换为+(正如 jlordo 在评论中指出的那样)。

于 2012-12-09T16:48:48.863 回答
0

以下应该有效:

^[^\s:]*:(?!.*:)

如果您的字符串可以包含换行符,请使用 DOTALL 标志或将正则表达式更改为以下内容:

(?s)^[^\s:]*:(?!.*:)
于 2012-12-09T16:47:31.937 回答
0

这取决于我们所说的空白,它可能是

[^\\p{Space}:]*:[^:]
于 2012-12-09T16:56:02.670 回答
0

以下内容应该可以帮助您入门:

 Matcher MatchedPattern = Pattern.compile("^(\\w+\\:{1}[\"\\w\\s\\.]*)$").matcher("yourstring");
于 2012-12-09T19:16:18.517 回答