【问题标题】:Regex: Match partial string正则表达式:匹配部分字符串
【发布时间】:2021-03-12 13:30:13
【问题描述】:

我需要一些帮助 - 我的技能不足 :)(我不知道是否可以使用纯正则表达式)

案例:我有一些文本输入形式为:

input1: "abc,clutter,01;xyz,clutter,02;" (应该匹配)
input2: "abc,clutter,02;zyz,clutter,01;" (不匹配)
input3: "abc,clutter,02;abc,txt,txt,01;xyz,clutter,01"(应该匹配)

那么匹配应该是

  • 以 abc 开头(输入中的任何位置)
  • 介于两者之间的所有内容 - 除非 ,02;介于两者之间
  • 以 ,01 结尾;

类似: abc(.*)(?!,02;),01; .. 但这也匹配 input2,这不是意图:)

【问题讨论】:

    标签: regex regex-lookarounds


    【解决方案1】:

    您可以使用例如匹配除,; 之外的所有字符的重复模式

    \babc(?:,(?!02,)[^,;\n]+)*,01;
    
    • \babc一个单词边界,匹配abc
    • (?:非捕获组
      • ,(?!02,)[^,;\n]+ 负前瞻,断言不是 02,并匹配除 , ; 或换行符以外的任何字符
    • )* 关闭群组并可选择重复
    • ,01; 字面匹配

    Regex demo

    如果 abc 应该只匹配一个,你也可以将它添加到负前瞻

    \babc(?:,(?!(?:02|abc),)[^,;\n]+)*,01;
    

    Regex demo

    【讨论】:

      猜你喜欢
      • 2010-09-15
      • 1970-01-01
      • 2012-11-25
      • 2015-10-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多