Java Regex还有其他的词

Java Regex还有其他的词,java,regex,Java,Regex,我在Java中使用正则表达式。我只想得到字符串的大写字母 例如: 1.- M/PS(Obstétrico) - group1: M group2: PS 2.- M / PS* - Obstétrico - group1: M group2: PS 3.- H / PS Adulto - group1: M group2: PS 现在当我使用: regex : ([A-Z]+) 对于第一个案例,获取:group

我在Java中使用正则表达式。我只想得到字符串的大写字母

例如:

1.- M/PS(Obstétrico)          -   group1: M    group2: PS
2.- M / PS* - Obstétrico      -   group1: M    group2: PS
3.- H / PS Adulto             -   group1: M    group2: PS
现在当我使用:

regex : ([A-Z]+)
对于第一个案例,获取:
group1:M
group2:PS group3:O

所以我说,我要用这个模式排除:

regex : ([A-Z]+[^a-z])
但出于某种原因,它会出现一些角色,比如:

  • PS(
  • PS*
我正在使用

测试: 输入。 H/M* H(心前庭) PS* 婴儿医学博士 H/M/PS M/PS(Obstétrico)

输出 H、 M H 附言 M、 PS H、 M,PS M、 PS

如果您使用
([A-Z]+)[^A-Z]
,您将获得每个字符串:

第1组:M

然后在下一个find()之后,您将再次获得

第1组:PS

解释;正则表达式在一个组中捕获a到Z字母的任何连续序列,后面跟的不是a到Z。因此,它将在第一个组中捕获M,然后再次开始搜索并在第一个组中捕获PS


特别是对于您的3个字符串,您可以使用
([A-Z])*/*([A-Z]+)
,这将为每个字符串提供:

第1组:M

第2组:PS


说明:正则表达式捕获单个a到Z字母,后面跟一个空格0或更多次,后面跟一个斜杠(/),后跟一个空格0次或多次,然后捕获a到Z字母序列。因此,它将捕获第一组中的M,移动可能的空格和斜杠,并捕获第二组中的PS。

您可以在一行中将所有大写字母提取为一个数组:

String[] uppers = input.replaceAll("^[^A-Z]*([A-Z/ ]+[A-Z]).*", "$1").split("[^A-Z]+");

首先提取感兴趣的前导序列,然后分割(并丢弃)中间的非高位字符。

最后我用这个[/]?([A-Z]+)[$/*()]+非常感谢:)

很清楚为什么你的第二次尝试不起作用(不是“A-Z”没有你认为的作用),但为了清楚起见,您能列出要查找的字符串吗?
[^a-z]
匹配任何非小写字母的字符,例如匹配的
*
。您是说要查找所有不后跟小写字母的大写字母组吗?请澄清这是否是您想要的。如果是这样,您将需要一个“负面展望”,类似于
[a-Z]+(?![a-Z])
您的预期输出是什么?因此,我的预期输出是:M,p这3个字符串被单独处理。当我使用此表达式时,reggex得到M/,PS*最下面的一个工作正常,要么您输入错误,要么您给出的字符串错误。@Makoton我的答案中没有一个regex可以捕获(/)或(*).我在网页上看到了这一点。有什么问题吗nulls@Makoton将
([A-Z])*/*([A-Z]+)
放入“正则表达式”字段,然后将
M/PS(Obstétrico)
和其他字符串放入“输入1”到“输入3”字段。这将得到他明确表示不想要的
O
。此外,他想要一个正则表达式捕获组。@user1803551正是如此。我想我已经解决了。thx。(他根本没有明确说明,但我明白你的意思,我没有注意到)