2015-06-08 2 views
0

Я пытаюсь извлечь все присутствие 'и', 'a', 'the', 'an', '& amp;' из блока текста вместе со всем присутствием цифр.Java Regex для извлечения определенных слов

Я попытался создать различное регулярное выражение для этой цели, но не смог получить точный результат.

Все разряды выделены в порядке, но я не могу извлечь все вышеупомянутые строки через регулярное выражение.

Мое основное регулярное выражение было

Pattern p = Pattern.compile("^[0-9]"); 

я пробовал разные комбинации, как

Pattern p = Pattern.compile("^[0-9](&)"); 
Pattern p = Pattern.compile("^[0-9]+[&]"); 

, чтобы получить указанную выше строки, но бесполезно.

Пример текста:

System requirements: iOS 6.0 and Android (varies) & 
Version used in this guide: 2.2.4 (iPhone), 13.1.2 (Android) 

Ожидаемый результат

6.0,and,&,2.2.4,13.1.2 
+1

Каков ваш ожидаемый результат? – SubOptimal

+0

Не могли бы вы показать нам свои неудачные попытки? – ohaal

+0

@ohaal - OP показал нам, что он/она попытался .. * Мое основное регулярное выражение было * .. – TheLostMind

ответ

0

Вы можете использовать следующее регулярное выражение:

(\\ban?d?\\b|\\bthe\\b|\\B&\\B|[\\d.]+) 

См DEMO

1

Вы нигде не близки к вашим «попыткам», и я почти чувствую себя плохо, просто передавая вам решение, но если вы действительно «заинтересованы в том, чтобы изучать новые вещи» (как вы говорите в своем профиле SO), посмотрите на учебник регулярных выражений.

Основное применение alternation, grouping, quantifiers и anchors (/ word boundaries) решит вашу проблему.

(\b(?:a|an|and|the)\b|&|\d+(?:\.\d+)*) 

Объяснение:

NODE      EXPLANATION 
-------------------------------------------------------------------------------- 
    (      group and capture to \1: 
-------------------------------------------------------------------------------- 
    \b      the boundary between a word char (\w) 
          and something that is not a word char 
-------------------------------------------------------------------------------- 
    (?:      group, but do not capture: 
-------------------------------------------------------------------------------- 
     a      'a' 
-------------------------------------------------------------------------------- 
    |      OR 
-------------------------------------------------------------------------------- 
     an      'an' 
-------------------------------------------------------------------------------- 
    |      OR 
-------------------------------------------------------------------------------- 
     and      'and' 
-------------------------------------------------------------------------------- 
    |      OR 
-------------------------------------------------------------------------------- 
     the      'the' 
-------------------------------------------------------------------------------- 
    )      end of grouping 
-------------------------------------------------------------------------------- 
    \b      the boundary between a word char (\w) 
          and something that is not a word char 
-------------------------------------------------------------------------------- 
    |      OR 
-------------------------------------------------------------------------------- 
    &     '&' 
-------------------------------------------------------------------------------- 
    |      OR 
-------------------------------------------------------------------------------- 
    \d+      digits (0-9) (1 or more times (matching 
          the most amount possible)) 
-------------------------------------------------------------------------------- 
    (?:      group, but do not capture (0 or more 
          times (matching the most amount 
          possible)): 
-------------------------------------------------------------------------------- 
     \.      '.' 
-------------------------------------------------------------------------------- 
     \d+      digits (0-9) (1 or more times 
           (matching the most amount possible)) 
-------------------------------------------------------------------------------- 
    )*      end of grouping 
-------------------------------------------------------------------------------- 
)      end of \1 

Для использования в Java, вам придется бежать каждый \.

(\\b(?:a|an|and|the)\\b|&|\\d+(?:\\.\\d+)*) 
+0

Я никогда не говорил, что я хорошо знаком с регулярным выражением, но да, я знаю основы создания регулярного выражения, я пробовал много комбинаций, и я не могли упомянуть все, поэтому я упомянул очень простой для посетителей, чтобы просто дать идею. В любом случае, оцените свое время и объяснения. –

+0

@HappyDev: Не обижайтесь, но основываясь на ваших попытках, вы не знаете основ регулярного выражения. Основы регулярного выражения (т. Е. Некоторые из первых вещей, которые вы должны изучить) - именно то, что потребуется для решения этой проблемы (группировка, чередование, квантификаторы и привязки). Во всяком случае, спасибо за нижний план. :) – ohaal

Смежные вопросы