RegEx用于组合多个序列

和许多人一样,我正在努力解决看似“琐碎”的正则表达式问题。在给定的文本中,每当我在{}括号内遇到一个单词时,我需要提取它。我首先使用它

"\\{-?(\\w{3,})\\}"

它运作正常:

只要这个词没有任何空格或特殊字符,如'。例如,{Project}返回Project.But {Project Test}或{Project D'arce}不返回任何内容。我知道对于白色字符我需要使用\ s。但是我绝对不清楚如何添加到上面,我试过:

"%\\{-?(\\w(\\s{3,})\\)\\}"))

但是没有工作。如果我想添加包含特殊字符的单词,如果该怎么办?它真的很令人沮丧


阿波罗的战车
浏览 521回答 2
2回答

皈依舞

您可以使用字符类 [\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*}";正则表达式演示

翻阅古今

怎么样任何字符匹配里面{..}是不是}?要做到这一点,你可以用否定的字符类 [^..]一样[^}]。所以你的正则表达式看起来像"\\{[^}]{3,}\\}"但是,如果你想你的正则表达式仅限制于某些特定的字母,你也可以使用字符类的字符,甚至预定义的结合速记字符类像\w \s \d等。因此,如果你想接受任何单词字符\w或空格,\s或者'你的正则表达式看起来像"\\{[\\w\\s']{3,}\\}"
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java