和许多人一样,我正在努力解决看似“琐碎”的正则表达式问题。在给定的文本中,每当我在{}括号内遇到一个单词时,我需要提取它。我首先使用它"\\{-?(\\w{3,})\\}"它运作正常:只要这个词没有任何空格或特殊字符,如'。例如,{Project}返回Project.But {Project Test}或{Project D'arce}不返回任何内容。我知道对于白色字符我需要使用\ s。但是我绝对不清楚如何添加到上面,我试过:"%\\{-?(\\w(\\s{3,})\\)\\}"))但是没有工作。如果我想添加包含特殊字符的单词,如果该怎么办?它真的很令人沮丧
2 回答
皈依舞
TA贡献1851条经验 获得超3个赞
您可以使用字符类 [\w\s']
并向其添加可以允许匹配的内容:
\{-?([\w\s']{3,})}
在Java中
String regex = "\\{-?([\\w\\s']{3,})}";
如果要防止仅匹配3个空格字符,可以使用重复组:
\{-?\h*([\w']{3,}(?:\h+[\w']+)*)\h*}
关于模式
\{
匹配{
char-?
可选连字符\h*
匹配水平空白字符的0+倍([\w\s']{3,})
捕获一个匹配3次或更多次单词char,空白字符或'的组(?:\h[\w']+)*
重复0次以匹配1+水平空白字符,然后匹配字符类中列出的内容\h*
匹配水平空白字符的0+倍}
比赛}
在Java中
String regex = "\\{-?\\h*([\\w']{3,}(?:\\h+[\\w']+)*)\\h*}";
添加回答
举报
0/150
提交
取消