2012-06-27 1 views
0

Я пытаюсь написать регулярное выражение в java, которое соответствует словам и переносным словам. До сих пор у меня есть:Выражение выражения для переноса переносимого слова между строками и не переносимых слов

Pattern p1 = Pattern.compile("\\w+(?:-\\w+)",Pattern.CASE_INSENSITIVE); 
Pattern p2 = Pattern.compile("[a-zA-Z0-9]+",Pattern.CASE_INSENSITIVE); 
Pattern p3 = Pattern.compile("(?<=\\s)[\\w]+-$",Pattern.CASE_INSENSITIVE | Pattern.DOTALL); 

Это мой тест:

 
    Programs 
    Dsfasdf. Programs Programs Dsfasdf. Dsfasdf. as is wow woah! woah. woah? okay. 
    he said, "hi." aasdfa. wsdfalsdjf. go-to go- 
to 
asdfasdf.. , : ; " ' () ? ! -/\ @ # $ % &^~ ` * [ ] { } + _ 123

Любая помощь будет удивительным

Мой ожидаемый результат будет соответствовать все слова, то есть.

 
Programs Dsfasdf Programs Programs Dsfasdf Dsfasdf 
as is wow woah woah woah okay he said hi aasdfa 
wsdfalsdjf go-to go-to asdfasdf

часть, с которой я борюсь, соответствует словам, которые разделены между строками как одно слово.

ie.

go- 
to 
+0

Итак, вы хотите совместить слова, как с дефисом, так и без них? Но не знаки препинания или цифры? Также будет полезен ваш ожидаемый/желаемый результат из вашего тестового примера. –

+0

Мне не совсем понятно, что вы имеете в виду под «дефисным словом» между строками *. – Junuxx

ответ

2
 
\p{L}+(?:-\n?\p{L}+)* 
\ /^\ /^\ /\ /^^^ 
\/| | | | \/||| 
    | | | | | | ||`- Previous can repeat 0 or more times (group of literal '-', optional new-line and one or more of any letter (upper/lower case)) 
    | | | | | | |`-- End first non-capture group 
    | | | | | | `--- Match one or more of previous (any letter, upper/lower case) 
    | | | | | `------ Match any letter (upper/lower case) 
    | | | | `---------- Match a single new-line (optional because of `?`) 
    | | | `------------ Literal '-' 
    | | `-------------- Start first non-capture group 
    | `---------------- Match one or more of previous (any letter between A-Z (upper/lower case)) 
    `------------------- Match any letter (upper/lower case) 

Is this OK?

+4

Очень круто ascii "art" ... –

+0

Было ли это сгенерировано автоматически? Если да, откуда это? –

+0

Ручная работа на автопилоте! – ohaal

1

Я бы с регулярным выражением:

\p{L}+(?:\-\p{L}+)* 

Такое регулярное выражение должно соответствовать также слова "женихом", "А-ля-карт" и другие слова, содержащие символы специальной буквы категории. \p{L} соответствует одному коду в категории «письмо».

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