正则表达式:匹配部分字符串

时间:2021-03-12 13:30:13

标签: regex regex-lookarounds

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

案例:我有一些以下形式的文本输入:

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,这不是意图 :)

1 个答案:

答案 0 :(得分:1)

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

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

Regex demo

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

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

Regex demo

相关问题