首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Regex中的倍数或条件

Regex中的倍数或条件
EN

Stack Overflow用户
提问于 2022-04-22 15:20:36
回答 3查看 213关注 0票数 -2

假设我有一个混乱的数据模式:

  • TRND-0LL2134.SV
  • TRN_RTXDFT.SV
  • TRND_ZRSFTFF.SV
  • DR3345.SV

我试图使用regex来过滤前缀上的"-“或"_",以及那些没有。

期望输出

代码语言:javascript
复制
column1     column2     column3
=========== =========== ===========
TRND        -           0LL2134.SV
TRN         _           RTXDFT.SV
TRND        _           ZRSFTFF.SV
<blank>     <blank>     DR3345.SV

到目前为止我用了

代码语言:javascript
复制
\-|\_

对前缀使用"-“或"”进行筛选,但对没有前缀的字符串进行挑战筛选,使用"-“或"”

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2022-04-22 15:30:11

使用[-_]?匹配可选分隔符。

对于第一个单词使用一个非贪婪的量词,这样如果没有分隔符,它将是空的,并且这个单词将与第3列相关联。

代码语言:javascript
复制
^([A-Z0-9]*?)([-_]?)([A-Z0-9]+\.SV)$

演示

票数 1
EN

Stack Overflow用户

发布于 2022-04-22 15:31:47

使用?使组成为可选的

代码语言:javascript
复制
^(([A-Z]+)[-_])?(\w+.SV)$

演示

如果您希望与字符序列TRN(D)完全匹配,请不要:

代码语言:javascript
复制
^((TRND?)[-_])?(\w+.SV)$
票数 0
EN

Stack Overflow用户

发布于 2022-04-22 15:33:09

匹配的表达式应该包含3个组,用于将数据输入到输出的每个列中,并锚定在测试字符串的开头。

具体来说,试着..。

代码语言:javascript
复制
/^((.*)([_-])(.*))|^([^_-]+)$/

捕获组#2,3,4将包含进入您的列1,2,3,resp的数据;如果测试字符串中没有分离字符,则第3列的内容将位于捕获组#5中。

按照您描述问题的方式,这个模式总是匹配的--唯一的区别是测试字符串如何分配到列槽中。如果有效的测试字符串需要在.SV上结束,请使用

代码语言:javascript
复制
/^((.*)([_-])(.*[.]SV))$|^([^_-]+[.]SV)$/

由于您还没有指出在哪个编程环境中操作,这个答案不能专门说明如何使用regex。

变式1变式2的在线示例可在Regex101.com上找到

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71971096

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档