【问题标题】:Regex to match words after dot until a whitespace occurs正则表达式匹配点后的单词,直到出现空格
【发布时间】:2016-01-08 16:11:55
【问题描述】:

给定以下字符串

span.a.b this.is.really.confusing

我需要返回匹配的 ab。我已经能够接近以下正则表达式:

(?<=\.)[\w]+

但它也匹配 isreallyconfusing。当我包含负前瞻时,我会更接近,但我仍然不在那里。

(?<=\.)[\w]+(?=\s) # matches b, confusing

如何匹配点后的单词直到出现空格?

【问题讨论】:

  • 我目前正在使用 Elixir 来编写这个正则表达式。 elixir-lang.org/docs/master/elixir/Regex.html
  • 根据该链接,Elixir 中的正则表达式基于 Perl;并且根据 RegexBuddy 的说法,Perl 不支持后视中的重复。所以我会先尝试截断字符串,然后使用正则表达式。
  • 感谢您的快速回复。目前我正在使用String.split\2 函数来临时解决这个问题
  • words after a dot until a whitespace occurs 应该只匹配 bconfusing。您能否说明您的情况,为什么它应该匹配 a 而不是 confusing

标签: regex


【解决方案1】:

如何匹配点后的单词直到出现空格?
注意:这是与语言无关的伪代码,但应该可以工作。

regex = "^[^\s.]+.(\S+).*"
targets = <extracted_group>.split(".")

正则表达式解释:
"^": 众生
“[^\s.]+。” 1 个或多个非空白、非句点字符,后跟句点。
"(\S+)":分组并捕获以下所有非空白字符 ".*":匹配 0 个或多个任意非换行符

如果 split 函数采用正则表达式而不是字符串,则需要转义 '.'或使用字符类。

注意:你可以不拆分,但我认为拆分更透明。

【讨论】:

    【解决方案2】:

    我不确定这对于所有可能的情况是否足够好,但它应该适用于提供的示例:

    \.([\w]+)\.([\w]+)\s
    

    $1 = a, $2 = b

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-07-09
      • 2023-01-20
      • 2010-11-26
      • 1970-01-01
      • 1970-01-01
      • 2016-03-02
      • 2018-06-12
      • 2017-12-24
      相关资源
      最近更新 更多