【问题标题】:Regex : Match everything after first dash正则表达式:匹配第一个破折号后的所有内容
【发布时间】:2018-01-09 00:45:11
【问题描述】:

我有一个字符串,其中包含汽车的 rego 编号,例如

1FX9JE - 2012 Audi A3 Ambition Sportback MY12 Stronic

我想匹配除 rego 编号以外的所有内容,所以要匹配破折号之后的任何内容。

我想出的正则表达式是 (php)

\s.[^-]*$

只有当字符串仅包含 1 个破折号时,我提出的初始正则表达式才能匹配破折号之后的任何内容。例如https://regex101.com/r/Jao8W0/1

但是,如果字符串有超过 1 个破折号。正则表达式不可用。 例如:https://regex101.com/r/Jao8W0/2

即使字符串在第一个破折号之后包含额外的破折号,我仍然可以匹配第一个破折号之后的任何内容。

谢谢

【问题讨论】:

  • /-(?<match>.*)/ 将按您的意愿工作。
  • 哦,我怎么没想到。你想发表你的答案吗?
  • 您使用什么语言?如果没有语言,就无法说出您的案例可以使用哪些正则表达式功能。
  • 我在数据平台 domo 中使用正则表达式,似乎是从 prce php 中获取正则表达式。
  • 我建议 -\h*+\K[^\r\n]+$ 使用 m 修饰符。

标签: regex


【解决方案1】:

试试这个正则表达式:

^[^-\r\n]+-\s*\K.*$

Click for Demo

说明:

  • ^ - 断言字符串的开头
  • [^-\r\n]+ - 匹配 1 次以上既不是 - 也不是换行符的任何字符
  • -\s* - 匹配字符串中的第一个 -,后跟 0+ 个空格
  • \K - 忘记到目前为止匹配的所有内容
  • .* - 匹配 0+ 次出现的任何字符
  • $ - 断言字符串的结尾

【讨论】:

    【解决方案2】:

    如果只有一个空格,你可以使用这种模式:

    (?<=\-\s)(.*)
    

    如果可能有多个空格,则从 match 中获取 group(1)

    (?<=\-)\s*(.*)
    

    (?

    【讨论】:

      猜你喜欢
      • 2012-10-31
      • 1970-01-01
      • 2016-08-22
      • 1970-01-01
      • 1970-01-01
      • 2011-10-27
      相关资源
      最近更新 更多