如何在java中的输入字符串中使用正则表达式找到确切的单词?

时间:2014-06-09 09:59:39

标签: java regex

我有一个列表,我在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如下: -

enter image description here

我只需要找不到c或汽车或出租车。

请帮忙。

感谢。

1 个答案:

答案 0 :(得分:0)

您在正则表达式中指定了空格或&#39;,&#39;有0次或更多次出现。导致&#34; cater&#34;匹配。您需要的是{1,},以便只匹配完整,因为单词将以标点符号终止。您可能还希望将(,|\\s)替换为(,|\\s|\\.)