我有以下字符串,我想从dot开始删除最后一部分。您能否提一些建议?我是reg表达的新手。 [ABC]。[DEF]的 [GHI]
谢谢, MC
答案 0 :(得分:0)
您需要的regexp
是:
(.*?)(?:\.[^.]*)?$
regexp
逐件:
( # start of the first capturing sub-pattern
.* # matches any character, any number of times (zero or more)
? # make the previous quantifier (`*`) not greedy
) # end of the first sub-pattern
(?: # start of the second sub-pattern; it doesn't capture the matching string
\. # matches a dot (.)
[^.]* # matches anything but a dot (.), any number of times (zero or more)
) # end of the second sub-pattern
? # the previous sub-expression (the non-capturing sub-pattern) is optional
$ # matches the end of the string
工作原理:
第一部分(.*?)
匹配并捕获所有内容,直到最后一个点。问号(?
)使零或更多量词(*
)不贪心。它默认是贪婪的,因为第二个子表达式必须是可选的(如下所示),它的贪婪使它与整个字符串匹配。
第二个子模式开头的?:
说明符使其无法捕获。它匹配的子字符串不会被存储,也无法继续使用。
第二个子模式包含\.[^.]*
并匹配一个点(.
),后跟零个或多个字符,但它们都不能是点。如果输入字符串不包含点,则它不匹配,这使整个regexp
不匹配。这就是为什么它被标记为可选,因为它带有问号(?
)。
与regexp
一起使用的大多数工具都提供了一种方法,可以使用$n
或\n
作为替换字符串中的占位符来获取和使用捕获的字符串。上面的n
是捕获模式的编号,按其左括号(
计算。由于我们只有一个捕获子模式,因此它匹配的子字符串可以是$1
或\1
(或两者,或使用不同的语法)。
您可以在regex101.com上使用此regexp
。