【问题标题】:Regex to not match the dashes or a prefix in a string正则表达式不匹配字符串中的破折号或前缀
【发布时间】:2021-08-25 00:14:55
【问题描述】:

我有各种.PREFIX-word1-word2-word3 格式的字符串,其中 PREFIX 可以是任何单词,并且前缀后面可以有 1 个或多个单词(在本例中为 word1 word2 word3)。

我试图做的是匹配前缀后面的任何单词,以便最后我只返回单词(在本例中为 word1 word2 word3)。因此,我不想匹配 .PREFIX 或任何破折号。

鉴于 PREFIX 可以是我一直在使用的任何与 word1-word2-word3 匹配的 (?<=-).*$

为了匹配word1 word2 word3,我缺少什么?

【问题讨论】:

  • 那么,前缀或单个单词可能包含破折号?
  • (?<=-)\w+?见regex101.com/r/LG7rKj/1
  • 对,所以格式始终为.PREFIX- + word + -,您可以根据需要多次重复word + -。但是,最后一个单词没有破折号。
  • 如果单词或前缀中不允许使用破折号,您可以使用[^-]* 而不是.*。并删除最后的$
  • 太棒了,看起来两个正则表达式都是获得预期结果的有效方法。

标签: regex


【解决方案1】:

您可以使用以[^ 开头的negated character class 排除匹配连字符

(?<=-)[^-]+

Regex demo

如果您只想要连字符后的单个单词,您还可以排除匹配的空白字符\s

(?<=-)[^-\s]+

Regex demo

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-04-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-19
    • 2019-09-28
    • 2018-08-03
    相关资源
    最近更新 更多