首页 > 解决方案 > 如何在同一组中收集不同的表情

问题描述

我想检测以下行:

或者

或者

我尝试检测哪个如上。但我的问题是它检测到两组线:

BLOC3_ETAPE1=

U36_B1=

你在这里找到我的测试:https ://regex101.com/r/DFHmce/1

^(-.*|.*[<>=](?:(\s*)|(?:(?!\s*$).+[(](?:.*)[,](?:.*)[)](?:.*)))|(?:.*SN.*))$

预期行结果在同一组中:

TEST APPARTEMENT
S1=32.319156K(0.5M,37.5K)R 
S4<9.782835K(9.5K,10.5K)R 
S5>9.782835K(2.5K,10.5K)R 
U36_B1=
U6%=SN54LS02J
BLOC3_ETAPE1=
U9%=SN54LS273J  TestPos

标签: regex

解决方案


您可以使用 4 个部分的交替。

^(?:-.*|.*?SN.*|[^\r\n=<>]*[=<>].*?\([^,\r\n]+,[^,\r\n]+\)|[^\r\n_]+_[^\r\n_]+=$).*

4 个部分将匹配:

  • ^字符串的开始
  • (?:具有 4 个备选方案的非捕获组
    • -.*匹配-和该行的其余部分
    • |或者
    • .*?SN.*匹配包含 SN 的行
    • |或者
    • [^\r\n=<>]*[=<>]匹配直到任何一个< =>
    • .*?尽可能匹配除换行符以外的任何字符
    • \([^,\r\n]+,[^,\r\n]+\)匹配(1+ 个字符,逗号或换行符除外。再次匹配,除逗号或换行符和结束符之外的 1+ 字符)
    • |或者
    • [^\r\n_]+_[^\r\n_]+=$匹配以下划线结尾的部分=
  • )关闭组
  • .*匹配该行的其余部分

查看正则表达式演示


推荐阅读