如何获得最终或倒数第二个字符串正则表达式

How to get ultimate or penultimate string regex

我有一个字符串列表,如果存在,我想使用正则表达式对每个 _ 字符进行分组

Test1_MYSTRING_val1
Test1_MYSTRING

我想获得:

Test1, MYSTRING, val1
Test1, MYSTRING

This regex 适用于第一个字符串,但不适用于第二个字符串:(Test[\d])_([\w]+?)_([\w]+)

有什么建议吗?

正如评论中已经提到的,使用 split 是一种更好的方法。但是,如果你仍然需要使用正则表达式,你可以这样做:

(Test\d)_([A-Za-z0-9]+)(?:_([A-Za-z0-9]+))?
  • 这将提取两个或三个由 _
  • 分隔的捕获组
  • 第一个格式为:(Test\d)
  • 第二个的格式为:([A-Za-z0-9]+)并且将有至少一个字符
  • 第三个格式相同 ([A-Za-z0-9]+)(?:_ 确保不捕获下划线,整个内容被包围并用 ? 标记以表明它(第三组)可能存在也可能不存在

注意:我将 \w 改为 [A-Za-z0-9] 因为记住 \w 也匹配下划线 _

Regex 101 Demo