正则多个或条件

发布于 2025-01-23 18:00:16 字数 536 浏览 0 评论 0原文

假设我有杂乱的数据模式:

  • trnd-0ll2134.sv
  • trn_rtxdft.sv
  • trnd_zrsftff.sv
  • dr3345.sv

我试图使用REGEX在“ - ”或“ _”的前缀上过滤前缀,并且没有。

所需的输出

column1     column2     column3
=========== =========== ===========
TRND        -           0LL2134.SV
TRN         _           RTXDFT.SV
TRND        _           ZRSFTFF.SV
<blank>     <blank>     DR3345.SV

到目前为止,我

\-|\_

用“ - ”或“ ”的前缀过滤,但在没有“ - ”或“ ”的字符串上有挑战过滤的挑战过滤。

Lets say I have messy data pattern:

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

I am trying to use regex to filter on prefixes with "-" or "_", and those without.

Desired output

column1     column2     column3
=========== =========== ===========
TRND        -           0LL2134.SV
TRN         _           RTXDFT.SV
TRND        _           ZRSFTFF.SV
<blank>     <blank>     DR3345.SV

So far I used

\-|\_

to filter on prefixes with "-" or "" but have a challenge filtering on strings that do not have a prefix with either "-" or ""

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

随波逐流 2025-01-30 18:00:16

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

对于第一个单词,请使用非蛋白质量化器,以便如果没有分离器,它将是空白的,并且该单词将与第3列关联。

^([A-Z0-9]*?)([-_]?)([A-Z0-9]+\.SV)$

demo

Use [-_]? to match the optional separator.

Use a non-greedy quantifier for the first word so that if there's no separator, it will be blank and the word will be associated with column 3.

^([A-Z0-9]*?)([-_]?)([A-Z0-9]+\.SV)$

DEMO

情绪少女 2025-01-30 18:00:16

使用使组可选

^(([A-Z]+)[-_])?(\w+.SV)$

demo

如果您想完全匹配字符序列trn(d),而不是:

^((TRND?)[-_])?(\w+.SV)$

Use a ? to make a group optional

^(([A-Z]+)[-_])?(\w+.SV)$

Demo

If you want to match exactly the characters sequence TRN(D) than:

^((TRND?)[-_])?(\w+.SV)$
篱下浅笙歌 2025-01-30 18:00:16

您的匹配表达式应包含3组,以便将数据馈入输出的每一列,并固定在测试字符串的开头。

具体来说,尝试...

/^((.*)([_-])(.*))|^([^_-]+)$/

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

您描述问题的方式中捕获组5中,此模式将始终匹配 - 唯一区别在于如何将测试字符串分布到列插槽中。如果有效的测试字符串需要在.sv上结束,则使用

/^((.*)([_-])(.*[.]SV))$|^([^_-]+[.]SV)$/

您在哪个编程环境中使用该答案,因此无法指定如何使用正则拨号。

在线示例可在Regex101.com上获得 variant 1 变体2

Your matching expression should contain 3 groups for data to be fed into each of the columns of your output and be anchored at the beginning of your test strings.

Specifically, try ...

/^((.*)([_-])(.*))|^([^_-]+)$/

Capture groups #2,3,4 will contain the data to go into your columns 1,2,3, resp.; in case there is none of the separating characters in the test string, the content of column 3 will be in capture group #5

The way you've described your problem, this pattern will always match - the only difference is in how the test string is distributed into the column slots. If valid test strings need to end on .SV, use

/^((.*)([_-])(.*[.]SV))$|^([^_-]+[.]SV)$/

As you haven't indicated in which programming environment you are operating this answer can not specifiy how to employ the regex.

Online examples are available on Regex101.com for Variant 1 and Variant 2

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文