gpt4 book ai didi

java - 包含单词、数字和罗马数字的特定要求的正则表达式

转载 作者:行者123 更新时间:2023-12-01 19:56:24 24 4
gpt4 key购买 nike

我是使用正则表达式的新手。我正在尝试编写一个正则表达式来进行匹配,例如:`

(any word+any word from(class,standard,std,grade,level,semester,sem)+space(optional)+any number in between 1 to 12 OR any roman number in between I to XII+space+any word(optional)

正则表达式应该不区分大小写。例如: 'xi ncert 类数学课本' 。正则表达式将匹配短语“class xi”。如果字符串类似于:“数学教科书 of viiii 标准 ncert”。 RegEx 不应返回任何匹配项。

我已经编写了正则表达式:

(?i)((class|standard|std|grade|level|sem)( )?(1[0-2]|[1-9]|IX|IV|V?I{0,3}|XI{0,2})(.*?|$))

这是一段java代码:

    String pattern9 = "(?i)((class|standard|std|grade|level|sem)( )?(1[0-2]|[1-9]|IX|IV|V?I{0,3}|XI{0,2})(.*?|$))";

Pattern pattern = Pattern.compile(pattern9);
Matcher m = pattern.matcher("mathematics text book of viii standard ncert");

if (m.find( )) {
System.out.println(m.group());
}else{
System.out.println("No match");
}

这个正则表达式的工作原理如下:

Input : 'mathematics text book of class xi ncert'
Output : 'class' (Expected o/p : 'class xi')


Input : 'mathematics text book of viii standard ncert'
Output : 'standard' (Expected o/p : No match)

谁能帮我根据我的要求写一个正确的正则表达式?

最佳答案

您的错误在于 V?I{0,3} 中,它允许空匹配,并且在您的两种情况下都是如此。您应该使用 VI{0,3}|I{1,3} 来正确覆盖它。

此外,(.*?|$) 毫无意义,因为它总是匹配空字符串。

关于java - 包含单词、数字和罗马数字的特定要求的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49585334/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com