为了账号安全,请及时绑定邮箱和手机立即绑定

RegEx用于组合多个序列

RegEx用于组合多个序列

阿波罗的战车 2019-04-20 19:15:43
和许多人一样,我正在努力解决看似“琐碎”的正则表达式问题。在给定的文本中,每当我在{}括号内遇到一个单词时,我需要提取它。我首先使用它"\\{-?(\\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*}";

正则表达式演示


查看完整回答
反对 回复 2019-05-15
?
翻阅古今

TA贡献1780条经验 获得超5个赞

怎么样任何字符匹配里面{..}是不是}

要做到这一点,你可以用否定的字符类 [^..]一样[^}]。所以你的正则表达式看起来像

"\\{[^}]{3,}\\}"

但是,如果你想你的正则表达式仅限制于某些特定的字母,你也可以使用字符类的字符,甚至预定义的结合速记字符类\w \s \d等。

因此,如果你想接受任何单词字符\w或空格,\s或者'你的正则表达式看起来像

"\\{[\\w\\s']{3,}\\}"


查看完整回答
反对 回复 2019-05-15
  • 2 回答
  • 0 关注
  • 519 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信