正则表达式 - 字符匹配不以某字段开头或者结尾

在文件搜索或数据库查询中,经常会遇到一种场景,需要过滤以某段字符开头或结尾,或者不以某段字符开头或结尾的判断,这个时候最先想到的就是正则匹配。

以或不以某字符串开头

向前匹配

以str开头

1
^(str)
  1. ^ 判断是否是开头

以多个不同str开头

1
^(str1|str2|str3)

示例:

1
2
3
4
5
>>> import re
>>> print(re.match('^(https)', 'https://example.com').span())
(0, 5)
>>> print(re.match('^(www)', 'https://example.com'))
None

否定式前项匹配

1
^(?!str)
  1. ^ 判断是否是开头
  2. ?! 这里是否定向前查询

示例:

1
2
3
4
5
>>> print(re.match('^(?!www)', 'https://example.com').span())
(0, 0)
>>> print(re.match('^(?!https)', 'https://example.com'))
None

以或不以某字符串结尾

向后匹配

以str结尾

1
(str)$
  1. $ 判断是否是结尾

示例:

1
2
3
>>> print(re.match('.*(com)$', 'https://example.com').span())
(0, 19)

否定式后项匹配

不以str结尾

1
(?<!str)$
  1. $ 判断是否是结尾
  2. ?<! 否定向后查询

示例:

1
2
>>> print(re.match('.*(?<!cn)$', 'https://example.com').span())
(0, 19)