我是使用正则表达式的新手。我正在尝试编写一个RegEx来匹配,如:`
(任何单词+任何单词 从(类,标准,标准,等级,级别,学期,SEM)+空间(可选)+任何 1到12之间的数字或I到之间的任何罗马数字 XII +空格+任何单词(可选)
RegEx应该不区分大小写。 例如:'类xi ncert的数学教科书'。 RegEx将匹配短语“ class xi ”。 如果字符串如下:' viii standard ncert '的数学教科书。 RegEx不应该返回任何匹配。
我写过RegEx:
((类(Ⅰ')|标准| STD |等级|水平| 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)
根据我的要求,有人可以帮我写一个正确的正则表达式吗?
答案 0 :(得分:3)
你的错误在V?I{0,3}
允许空匹配,并在你的两种情况下都这样做。您应该使用VI{0,3}|I{1,3}
代替正确覆盖它。
此外(.*?|$)
相当无意义,因为它总是匹配一个空字符串。