正则表达式,用于捕获行之间的连字符单词和非带连字符的单词



我正在尝试用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);

这是我的测试用例:

    程序    DSFASDF。程序 程序 DSFASDF。DSFASDF。就像哇哇!哇。哇?好。    他说,"嗨。"WSDFALSDJF.去-自ASDFASDF.., : ;" ' ( ) ? !-/\ @ # $ % & ^ ~ ' * [ ] { } + _ 123

任何帮助都会很棒

我的预期结果是匹配所有单词,即。

程序 Dsfasdf 程序 程序 Dsfasdf Dsfasdf就像是哇哇哇哇好吧,他说嗨,阿斯德法WSDFALSDJF go-to go-to asdfasdf 

我正在努力的部分是将行之间拆分的单词匹配为一个单词。

即。

去-自
\p{L}+(?:-?\p{L}+)*\  /^\/^\/\  /^^^ \/| | | | \/|||  | | | | |  | ||'- 上一个可以重复 0 次或多次(一组文字 '-'、可选换行符和一个或多个任何字母(大写/小写))  | | | | |  | |'-- 结束第一个非捕获组  | | | | |  | '--- 匹配一个或多个以前的(任何字母,大写/小写)  | | | | |  '------匹配任何字母(大写/小写)  | | | |'---------- 匹配单个换行符(可选,因为"?")  | | |"------------文字"-"  | |'-------------- 启动第一个非捕获组  | '---------------- 匹配以前的一个或多个(A-Z(大写/小写)之间的任何字母)  '-------------------匹配任何字母(大写/小写)

可以吗?

我会使用正则表达式:

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

此类正则表达式还应匹配单词"未婚夫"、"点菜"和其他包含一些特殊类别"字母"字符的单词。 p{L}匹配类别"字母"中的单个代码点。

最新更新