正则表达式需要找到只包含 [st||nd||rd||th] 的数字

S N*_*Rao 0 java regex

我需要一个正则表达式才能找到包含这些单词的数字:

 1st, 2nd, 3rd, 4th, 5th.
Run Code Online (Sandbox Code Playgroud)

来自以下文本:

 <xps:span class="ref_sn">Huang</xps:span></xps:span> <xps:span
 class="ref_au"><xps:span class="ref_gn">K.</xps:span> <xps:span
 class="ref_sn">Chingin</xps:span></xps:span> <xps:span
 class="ref_au"><xps:span class="ref_gn">R.</xps:span> <xps:span
 class="ref_sn">Zenobi</xps:span> 1st</xps:span> <xps:span
 class="ref_atitle">Real<span class='xps_ndash'>&#8211;iou</span>time,
 on<span class='xps_ndash'> 2nd &#8211;iou</span>line 4th monitoring of
 organic chemical reactions using 3rd extractive electrospray
 ionization tandem mass 5th spectrometry</xps:span> <xps:span
 class="ref_jtitle">Rapid Commun. Mass Spectrom.</xps:span>
Run Code Online (Sandbox Code Playgroud)

我需要从中将这些字母转换为 sup。

我正在使用这个正则表达式,但它不起作用。

(\b)(\d+([st|nd|rd|th]+)\b)
Run Code Online (Sandbox Code Playgroud)

Bra*_*raj 5

[st|nd|rd|th]Character 类也称为character set,您可以告诉正则表达式引擎仅匹配多个字符中的一个。

[st|nd|rd|th]            any character of: 
                       's', 't', '|', 'n', 'd',
                       '|', 'r', 'd', '|', 't', 'h'
Run Code Online (Sandbox Code Playgroud)

你需要使用(...)而不是[...]


你可以试试

\d+(?=st|nd|rd|th)
Run Code Online (Sandbox Code Playgroud)

这是演示

示例代码:

String str = "1st, 2nd, 3rd, 4th, 5th.";
Pattern p = Pattern.compile("\\d+(?=st|nd|rd|th)");
Matcher m = p.matcher(str);
while (m.find()) {
    System.out.println(m.group());
}
Run Code Online (Sandbox Code Playgroud)

输出

1
2
3
4
5
Run Code Online (Sandbox Code Playgroud)

您可以使用捕获组修改您的正则表达式,如下所示,并获得所需的匹配组:

Pattern p=Pattern.compile("(\\d+)(st|nd|rd|th)");
Matcher m=p.matcher(str);
while(m.find()){
    System.out.println(m.group(1));
}
Run Code Online (Sandbox Code Playgroud)