Java Regex还有其他的词
我在Java中使用正则表达式。我只想得到字符串的大写字母 例如: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
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*
([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。(他根本没有明确说明,但我明白你的意思,我没有注意到)