正则表达式排除匹配的第一个和最后一个字符
Regex to exclude first and last characters of match
我有以下字符串:
word_word2_word3_word4
我的意图是只提取 'test2'。使用 _\w*?_
作为字符串匹配,我可以获得 'word2' 作为匹配,但我看不到删除那些下划线以仅匹配 'word2' 的方法。
我不能使用 .split() 或类似的东西,这个值只能使用 Regex 收集。
大家有什么修改建议吗?
你的问题不是很清楚,但是假设word2
、word3
等是不包含_
的任意词,你可以使用捕获组来提取要提取的字符的子集。例如:
\w*_(\w*)_\w*_\w*
匹配您的字符串,第一个(也是唯一一个)捕获组提取第二个词。也许 *
应该是 +
取决于你是否想接受零大小的单词。
如果您不担心性能,有一种快速而肮脏的方法,就是删除匹配项的第一个和最后一个字符。
你也可以使用积极的前瞻和后视
(?<=_)\w*2(?=_)
My intention is to extract only 'test2'. Using \w*? as string match, I can get 'word2' as a match, but I can't see a way of removing those underscores to match only 'word2'.
下划线不会成为匹配字符串的一部分,但会出现在它的前后
编辑:
更进一步,如果匹配字符串在整个文本的开头或结尾,则不会被下划线包围。
(?<=_|^)[^_]*2(?=_|$)
这使得在这种特定情况下可以选择使用下划线。
我有以下字符串: word_word2_word3_word4
我的意图是只提取 'test2'。使用 _\w*?_
作为字符串匹配,我可以获得 'word2' 作为匹配,但我看不到删除那些下划线以仅匹配 'word2' 的方法。
我不能使用 .split() 或类似的东西,这个值只能使用 Regex 收集。
大家有什么修改建议吗?
你的问题不是很清楚,但是假设word2
、word3
等是不包含_
的任意词,你可以使用捕获组来提取要提取的字符的子集。例如:
\w*_(\w*)_\w*_\w*
匹配您的字符串,第一个(也是唯一一个)捕获组提取第二个词。也许 *
应该是 +
取决于你是否想接受零大小的单词。
如果您不担心性能,有一种快速而肮脏的方法,就是删除匹配项的第一个和最后一个字符。
你也可以使用积极的前瞻和后视
(?<=_)\w*2(?=_)
My intention is to extract only 'test2'. Using \w*? as string match, I can get 'word2' as a match, but I can't see a way of removing those underscores to match only 'word2'.
下划线不会成为匹配字符串的一部分,但会出现在它的前后
编辑:
更进一步,如果匹配字符串在整个文本的开头或结尾,则不会被下划线包围。
(?<=_|^)[^_]*2(?=_|$)
这使得在这种特定情况下可以选择使用下划线。