正则表达式:匹配字符组或行尾
如何在一个字符组中匹配 ^
(行的开始)和 $
(行的结束)呢?
简单的例子
我们有一个字符串:zazty
规则:
- 匹配任何一个 "z" 或 "y"
- 如果前面是
- 一个 "a" 或 "b";或者
- 行的开始。
通过的例子:
匹配前两个 "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])
这种写法(其实也没那么糟糕)。