Regexp, соответствующий у свиньи

Используя апачскую свинью и текст

hahahah.  my brother just didnt do anything wrong. He cheated on a test? no way!

Я пытаюсь соответствовать "своему брату, просто не сделал ничего плохого".

Идеально, я хотел бы соответствовать чему-либо начинающемуся "с моего брата просто" и конца или с пунктуацией (конец предложения) или с EOL.

Смотря на документы свиньи и затем переходя по ссылке к java.util.regex. Шаблон, я полагаю, что должен смочь использовать

extrctd = FOREACH fltr GENERATE FLATTEN(EXTRACT(txt,'(my brother just .*\\p{Punct})')) as (txt:chararray);

Но это, кажется, соответствует до конца строки. Какие-либо предложения для выполнения этого соответствия? Я готов вытащить волосы, и вытаскивают мои волосы, я значу переключатель для потоковой передачи Python

6
задан Neil Kodner 19 July 2010 в 21:42
поделиться

3 ответа

По умолчанию квантификаторы являются жадными. Это означает, что они соответствуют максимально возможному количеству. В данном случае вы хотите, чтобы они совпадали только до первого знака препинания. Другими словами, вы хотите получить как можно меньше совпадений.

Поэтому для решения вашей проблемы вам нужно сделать квантификатор не жадным, добавив ? сразу после него:

my brother just .*?\\p{Punct}
                  ^

Обратите внимание, что использование ? здесь отличается от его использования в качестве квантификатора, где он означает "соответствовать нулю или единице".

4
ответ дан 17 December 2019 в 06:59
поделиться

Вы пробовали: . * (Только мой брат. * \\ p {Punct})

Похоже, ваше выражение лица хотело моего брата часть должна быть началом строки, но в вашем примере она находится в середине строки, поэтому вы должны учитывать все до моего брата .

0
ответ дан 17 December 2019 в 06:59
поделиться

Вы соответствуете. * Который есть. .. все ... попробуйте [az] * сопоставить только буквы

0
ответ дан 17 December 2019 в 06:59
поделиться
Другие вопросы по тегам:

Похожие вопросы: