正则表达式:匹配字符组或行尾

39 投票
4 回答
25387 浏览
提问于 2025-04-17 12:24

如何在一个字符组中匹配 ^(行的开始)和 $(行的结束)呢?


简单的例子

我们有一个字符串:zazty

规则:

  1. 匹配任何一个 "z" 或 "y"
  2. 如果前面是
    1. 一个 "a" 或 "b";或者
    2. 行的开始。

通过的例子:
匹配前两个 "z"

一个可以用的正则表达式是:
(?:^|[aAbB])([zZyY])

但是我一直在想,如果能在字符组里面用某种方式表示行的开始和结束,那会更简洁。
比如:[^aAbB]([zZyY])
(在这个例子中,假设 ^ 表示行的开始,而实际上它在这里是字符组的一个负向匹配)


注意:我在用 Python,但知道在 bash 和 vim 中也会有帮助。

更新:再次查看了 手册,上面说对于字符集,除了字符类(例如 \w)之外,其他的都失去了特殊含义。

在字符类的列表中,有 \A 表示行的开始,但这并不适用于 [\AaAbB]([zZyY])

有人知道为什么吗?

4 个回答

1

试试这个:

(?<![^abAB])([yzYZ])
2

在字符串的开头加上字符 'a'。然后使用 [aAbB]([zZyY])

35

在方括号 [] 里面,你不能使用 ^$,因为在字符类中,只有 ^(表示“除了这个”)和 -(表示“范围”)有特殊含义。其他的像 \A\Z 就不算是字符类了。

这个规则适用于所有标准的正则表达式,所以你只能用 (^|[stuff])($|[stuff]) 这种写法(其实也没那么糟糕)。

撰写回答