【问题标题】:Match words separated by comma in a line starting with a specific keyword在以特定关键字开头的行中匹配以逗号分隔的单词
【发布时间】:2019-01-27 10:56:16
【问题描述】:

我有以下文字

type MyType1
type MyType2, MyType3
type MyType4,MyType5,MyType6, ...
NotMyType1, NotMyType2

如何匹配以关键字 type 开头的行中所有以逗号分隔的*字词,以便我最后只有

MyType1
MyType2
MyType3
MyType4
MyType5
MyType6

我最初的尝试是匹配所有逗号分隔的单词 (https://regex101.com/r/mQDCgX/1)

(?<=[,])(\w+)(?=[,])|(?<=[\s,])(\w+)(?=[,]|$)

然后尝试对它进行分组并使用lookbehind来匹配type。但是,它没有用。

注意: * 逗号也可以用空格括起来

【问题讨论】:

  • 你使用什么语言?
  • 试试(?:^type|\G(?!^)),? +\K(\w+)。在此处查看现场演示regex101.com/r/CV9jqu/1
  • 您可以使用:(?:\btype|(?!^)\G,)\h*\K[^,\s]*
  • 不客气。我鼓励您将不成功的尝试添加到您的问题中,以便我们发布答案。目前它没有显示您为解决问题所做的任何努力。
  • 我进一步测试,当单词严格用逗号分隔时,@revo 的答案似乎停止匹配,即两者之间没有空格。 anubhava 的答案中的 \h* 似乎可以处理它。

标签: regex pcre regex-lookarounds


【解决方案1】:

将我的评论转换为答案。

你可以使用这个正则表达式:

(?:\btype|(?!^)\G,)\h*\K[^,\s]*
  • \G 在上一个匹配的结尾或第一个匹配的字符串的开头断言位置。
  • (?!^) 用于确保我们不在起点
  • \K 用于重置比赛信息

RegEx Demo

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-09-19
    • 2021-02-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多