2014-06-09 2 views
-1

나는 다음과 같이 내가 스프링 설정 파일에서 정의한 목록을 가지고있다 -자바의 입력 문자열에서 정규식을 사용하여 정확한 단어를 찾는 방법은 무엇입니까?

<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; 

    } 

입력 I 테스트가 생각하는 : = "<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

나는 단지 캐서린이나 자동차 나 택시를 찾을 필요가있다.

도와주세요.

감사합니다.

+2

EPP 스크린 샷! 예! 강력한 무기. :) – zx81

답변

0

정규 표현식에서 공백 또는 ','에 0 번 이상 표시되도록 지정했습니다. 일치하는 "음식"에 리드. 필요한 단어는 {1,}이므로 완전한 단어 만 일치됩니다. 단어는 구두점으로 끝나기 때문입니다. (,|\\s)(,|\\s|\\.)으로 바꿀 수도 있습니다.

+1

FYI :'{0,}'은'*'와 같고'{1,}'은'+'와 같고 보통 후자의 버전이 사용됩니다. – Biffen

관련 문제