1

我有一个简单的要求。我们使用休眠验证引擎来确定约束是真还是假。

如果所有单词都以大写字符开头,则 True 应该是文本。有一些困难:

单词也可以这样开头

8-测试
甚至
8测试
甚至
(测试)
甚至
-测试
或任何类似的东西
通常它们也用逗号分隔(或不同的分隔符):
测试,测试,测试
请记住,我只想确保字符串中的单词以大写开头。当你看到我的尝试时,可能我把事情复杂化了。

以下是一些示例: 预计匹配所有(真):

- 羟基异己基 3-环己烯甲醛,苄基
- 测试,测试,测试
- CI 15510,甲基氯异噻唑啉酮,EDTA二钠
- 不适用
- 不适用
预计不匹配所有(假):
- 羟基异己基 3-环己烯甲醛,苄基
- 测试,测试,测试
- CI 15510,甲基氯异噻唑啉酮,eDTA二钠
- 呐
- 不适用
我的尝试正朝着这个方向发展:

final String oldregex = "([\\W]*\\b[A-Z\\d]\\w+\\b[\\W]*)+";
final String regex = "([A-Z][\\d\\w]+( [A-Z][-\\d\\w]+)*, )*[A-Z][-\\d\\w]+( [A-Z][-\\d\\w]+)*\\.";'
实际上使用“ oldregex ”选项我遇到了一些文本的不定式计算使用它来测试正则表达式:http ://gskinner.com/RegExr/ (当然没有双反斜杠)

谢谢帮忙!!!

4

4 回答 4

6

正则表达式

看看它在行动

^(?:[^A-Za-z]*[A-Z][^\s,]*)*[^A-Za-z]*$

解释

^                # start of the string
(?:              # this group matches a "word", don't capture the group
  [^A-Za-z]*     # skip any non-alphabet characters at start of the word
  [A-Z]          # force an uppercase letter as a first letter
  [^\s,]*        # match anything but word separators (\s and ,) after 1th letter
)*               # the whole line consists of such "words"
[^A-Za-z]*       # skip any non-alphabet characters at the end of the string
$                # end of the string

注意:如果您的单词分隔符不同于空格和逗号,您可以修改正则表达式。(例如,更改[^\s,][^,:-]或您使用的任何内容)

于 2012-08-30T17:34:12.743 回答
1

测试了这个

^([^A-Za-z]*[A-Z][A-Za-z]*)+?$

它适用于您的测试用例

编辑:

^([^A-Za-z]*?[A-Z][A-Za-z]*?)+.?

对于性能问题

于 2012-08-30T18:10:14.047 回答
1

这就是我想要的:大写单词和字符 java 匹配

"^((^|[^A-Za-z]+)[A-Z][A-Za-z]*)*[^A-Za-z]*$"

于 2012-08-31T13:24:41.177 回答
0

这样的事情似乎是正确的:

\b[^a-zA-Z,\s]*?[A-Z][^,\s]*?(\b|,)

\bs 匹配单词边界。[^a-zA-Z]*?允许前缀不是字母。然后我们有一个带有 的大写字母[A-Z],然后是任何不是大写字母的[^A-Z,\s]*?

于 2012-08-30T17:32:32.733 回答