如何获得最终或倒数第二个字符串正则表达式
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
也匹配下划线 _
我有一个字符串列表,如果存在,我想使用正则表达式对每个 _ 字符进行分组
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
也匹配下划线 _