我需要一个正则表达式结果,不包括匹配模式的开头和结尾的子字符串

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了我需要一个正则表达式结果,不包括匹配模式的开头和结尾的子字符串相关的知识,希望对你有一定的参考价值。

我有一个模式,我需要匹配,总是一个日期“_YYYYMMDD。”。但是,我不想包含“_”和“。”。在结果中。我有一个成功匹配上面的正则表达式模式。它太复杂了,不能包含在这里,因为我必须手工编写并将其搞砸。

我只想说我有一个模式:

[_](lots of stuff in the middle)[.]

它工作正常,但我不想包括“_”和“。”

任何答案都非常感谢。谢谢!

答案

要使下划线和点与模式匹配而不将其包含在完整匹配的文本中,您需要在正则表达式模式中使用外观。以下正则表达式将匹配_之后的日期,然后是.

(?<=_)\d{8}(?=\.)

Regex Demo

此外,如果要将年,月和日期部分捕获到自己的捕获组中,可以使用此正则表达式并捕获group1中的year部分,group2中的月份和group3中的日期,

(?<=_)(\d{4})(\d{2})(\d{2})(?=\.)

Demo with different parts of date into their own groups

另一答案

最简单的方法是将结果中的第一个和最后一个字符切片。你可以通过字符串长度来做到这一点:

result="${result:1:${#result}-2}"

(或result="${result:1:8}",因为长度将是恒定的)

或者按特定字符:

result="${result#_}"
result="${result%.}"

以上是关于我需要一个正则表达式结果,不包括匹配模式的开头和结尾的子字符串的主要内容,如果未能解决你的问题,请参考以下文章

正则表达式:如何匹配不以前缀列表开头的子字符串

匹配除以单词开头之外的所有内容的模式[重复]

C# 正则表达式

如何使用正则表达式匹配不以某些字符开头或结尾的单词?

正则表达式:匹配除特定模式之外的所有内容

求一个正则表达式: 以英文字母开头,只能包含英文字母、数字、下划线