我有一个列表,我在spring配置文件中定义如下: -
<bean id="LatinExpressions" class="org.springframework.beans.factory.config.ListFactoryBean" scope="singleton">
<property name="sourceList">
<list>
<value>ad lib\.</value>
<value>ad libitum</value>
<value>ca</value>
<value>ca\.</value>
<value>circa</value>
<value>cet\. par\.</value>
<value>ceteris paribus</value>
<value>cf\.</value>
<value>e\.g\.</value>
<value>i\.e\.</value>
<value>in vacuo</value>
<value>in situ</value>
<value>in vitro</value>
<value>in vivo</value>
<value>inter alia</value>
<value>versus</value>
<value>vice versa</value>
<value>vide infra</value>
<value>vide supra</value>
<value>viz\.</value>
<value>vs</value>
<value>vs\.</value>
<value>versus</value>
<value>in priori</value>
<value>etc\.</value>
</list>
</property>
</bean>
我的作用是扫描列表中这些元素的输入,并计算出斜体或罗马字母的出现次数。为此,我编写了一个适用于几乎所有情况的模式。以下是我写的方法: -
private String maintainRomanOrItalicConsistencyInArticle(String currentLine){
int latinromanOcurrenceinContent=0;
int latinitalicOccurenceinContent=0;
ApplicationContext ctx = new ClassPathXmlApplicationContext("latinexpressions.xml");
@SuppressWarnings("unchecked")
List<String> latinExpressions = (List<String>)ctx.getBean("LatinExpressions");
for(String latinexp : latinExpressions){
Pattern findRomanItalics = Pattern.compile("((<em>)?)\\b"+ latinexp+"(,|\\s){0,}(\\b)?((</em>)?)");
Matcher findRomanItalicsMatcher = findRomanItalics.matcher(currentLine);
while(findRomanItalicsMatcher.find()){
if(findRomanItalicsMatcher.group(1)!=null && findRomanItalicsMatcher.group(5)!=null){
latinitalicOccurenceinContent+=1;
}
else{
latinromanOcurrenceinContent +=1;
}
}
}
if(latinromanOcurrenceinContent>latinitalicOccurenceinContent){
System.out.println("latinromanOcurrenceinContent:::" + latinromanOcurrenceinContent);
}
else{
System.out.println("latinitalicOccurenceinContent::" +latinitalicOccurenceinContent);
}
return currentLine;
}
我正在测试的输入是:= "<p>For example try this <em>ad libitum</em>, <em>circa</em>, <em>paribus</em>are latin expressions.The following list also contains some latin expressions:-<em>ad lib.,</em>inter alia,<em>vide infra,</em>vide infra<em>in priori,</em></p> cater. This is ca, ad libitum;
我的问题是我的模式也发现cater
如下: -
我只需要找不到c或汽车或出租车。
请帮忙。
感谢。
答案 0 :(得分:0)
您在正则表达式中指定了空格或&#39;,&#39;有0次或更多次出现。导致&#34; cater&#34;匹配。您需要的是{1,}
,以便只匹配完整,因为单词将以标点符号终止。您可能还希望将(,|\\s)
替换为(,|\\s|\\.)
。