我需要一个正则表达式才能找到包含这些单词的数字:
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'>–iou</span>time,
on<span class='xps_ndash'> 2nd –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)
[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)