【问题标题】:RegEx: Split String Into 1 Or More Groups正则表达式:将字符串拆分为 1 个或多个组
【发布时间】:2020-03-27 17:37:37
【问题描述】:

我正在使用 Google 表格的 REGEXEXTRACT 函数。 每行的数据是一个字符串,如下所示:

2020 年 2 月 15 日 - 乔·塞芬
2020 年 2 月 18 日 - Candy Kane - Toot Suites - Some Street 123
2020 02 19 - Badonk Edonk - 在船上

我需要为每一行捕获以下组:

(2020 年 2 月 15 日)(乔·塞芬)
(2020 02 18)(Candy Kane)(Toot Suites)(123 Some Street)
(2020 02 19)(Badonk Edonk)(在船上)

分隔符始终为“-”(空格连字符空格),但并非每一行都有相同数量的分隔符。

拆分字符串看起来应该很简单,但我的正则表达式技能充其量只是初级;我已经为此努力了大约一个小时(在 regex101.com 的帮助下),但未能设计出产生所需输出的表达式。

我正在尝试对此的变化:

^(?>[0-9 ]* - )(.*)( - .*)?  

但我的输出总是捕获前两组,而不是其余组:

(2020 年 2 月 15 日)(乔·塞芬)
(2020 02 18)(Candy Kane)(Toot Suites)(123 Some Street)
(2020 02 19)(Badonk Edonk)(在船上)

或者它将日期之后的所有内容作为一个组捕获:

(2020 年 2 月 15 日)(-乔·塞芬)
(2020 年 2 月 18 日)( - Candy Kane - 图特套房 - Some Street 123 号)
(2020 02 19)(-Badonk Edonk-在船上)

我愿意接受你的建议

【问题讨论】:

  • 我已经编辑了原帖。
  • 如果您需要获得 2、3 或 4 个组,请尝试 ^(.*?) - (.*?)(?: - (.*?))?(?: - (.*?))?$。见this regex demo
  • 做到了!我现在正在剖析你在 regex101 中的表达 :) 非常感谢!

标签: regex string split delimiter


【解决方案1】:

如果您需要获得 2、3 或 4 个组,您可以使用

^(.*?) - (.*?)(?: - (.*?))?(?: - (.*?))?$

regex demo

详情

  • ^ - 字符串开头
  • (.*?) - 第 1 组:除换行符之外的任何零个或多个字符,尽可能少
  • - - 一个空格,-,空格
  • (.*?) - 第 2 组:除换行符之外的任何零个或多个字符,尽可能少
  • (?: - (.*?))? - 一个可选的非捕获组,匹配 1 次或 0 次出现
    • - - 一个空格,-,空格
    • (.*?) - 第 3 组:除换行符之外的任何零个或多个字符,尽可能少
  • (?: - (.*?))? - 一个可选的非捕获组,匹配 1 次或 0 次
    • - - 一个空格,-,空格
    • (.*?) - 第 4 组:除换行符之外的任何零个或多个字符,尽可能少
  • $ - 字符串结束。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-05-14
    • 1970-01-01
    • 1970-01-01
    • 2016-12-02
    • 1970-01-01
    • 2013-09-11
    • 1970-01-01
    相关资源
    最近更新 更多