regex - 如何在同一组中收集不同的表情
问题描述
我想检测以下行:
- 首先 ”- ”
或者
- 包含=或<或>并且在该行之后有强制:值 ( , )
或者
- 包含SN
我尝试检测哪个如上。但我的问题是它检测到两组线:
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
解决方案
您可以使用 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_]+=$
匹配以下划线结尾的部分=
)
关闭组.*
匹配该行的其余部分
查看正则表达式演示
推荐阅读
- sql - 显示特定字段的负值
- angular - 在 Angular 中,有没有办法拥有应用程序级工具栏,但在登录、注册等页面中却没有?
- c# - 没有注册类型的服务
- karate - 单击不使用组合框向下箭头按钮空手道 UI 测试
- angular - Angular 9 SSR - 我们可以为项目中的一个模块执行 SSR 吗?
- javascript - 使用 react-select 将值传递给状态
- bash - 在 bash 脚本中打印数组
- cassandra - 如何为 Apache Cassandra 编写自定义 Snitch?
- assembly - 数据溢出时标志寄存器中的 CF、OF
- php - PHP从字符串而不是字符中获取单词数