正则表达式匹配开头和结尾
正则表达式是一种用来匹配字符序列的模式,其语法规则十分灵活,可以实现很多字符串操作。在实际开发中,我们可能需要对一个字符串的开头或结尾进行特定的匹配操作,本篇文章将着重介绍正则表达式如何选择和匹配开头和结尾的字符串。
匹配字符串开头
在Python中,我们通常使用re模块来进行正则表达式匹配,其中^标记可用于匹配字符串的开头。例如,我们要匹配以”hello”开头的字符串,可以使用如下代码:
import re
string1 = "hello world"
string2 = "world hello"
pattern = r"^hello"
match1 = re.search(pattern, string1)
match2 = re.search(pattern, string2)
if match1:
print("string1以hello开头")
else:
print("string1不以hello开头")
if match2:
print("string2以hello开头")
else:
print("string2不以hello开头")
输出结果为:
string1以hello开头
string2不以hello开头
在上述代码中,我们将正则表达式模式定为^hello,其中^表示匹配字符串的开头,hello表示匹配hello字符串。通过re.search方法在指定字符串中进行匹配,并返回一个Match对象,最后判断是否匹配成功,如果成功则输出以hello开头的字符串。
需要注意的是,如果我们要匹配的字符串中包含换行符\n,那么^标记只匹配行的开头而不是字符串的开头。在这种情况下,我们可以使用re.MULTILINE标记来强制^匹配字符串的开头。例如:
import re
string1 = "hello world\nhello everybody"
string2 = "world hello\nhello world"
pattern = r"^hello"
match1 = re.search(pattern, string1, re.MULTILINE)
match2 = re.search(pattern, string2, re.MULTILINE)
if match1:
print("string1以hello开头")
else:
print("string1不以hello开头")
if match2:
print("string2以hello开头")
else:
print("string2不以hello开头")
输出结果为:
string1以hello开头
string2不以hello开头
在第二段代码中,由于字符串中存在换行符,我们在re.search方法中添加re.MULTILINE标记,表示强制^匹配字符串的开头。最后输出的结果与期望相符。
匹配字符串结尾
类似地,我们可以使用$标记来匹配字符串的结尾。例如,我们要匹配以”world”结尾的字符串,可以使用如下代码:
import re
string1 = "hello world"
string2 = "world hello"
pattern = r"world$"
match1 = re.search(pattern, string1)
match2 = re.search(pattern, string2)
if match1:
print("string1以world结尾")
else:
print("string1不以world结尾")
if match2:
print("string2以world结尾")
else:
print("string2不以world结尾")
输出结果为:
string1以world结尾
string2不以world结尾
在上述代码中,我们将正则表达式模式定为world,其中表示匹配字符串的结尾,world表示匹配world字符串。通过re.search方法在指定字符串中进行匹配,并返回一个Match对象,最后判断是否匹配成功,如果成功则输出以world结尾的字符串。
需要注意的是,同样地,如果我们要匹配的字符串中包含换行符\n,那么标记只匹配行的结尾而不是字符串的结尾。同样地,我们可以添加re.MULTILINE标记来强制匹配字符串的结尾。例如:
import re
string1 = "hello world\nhello everybody"
string2 = "world hello\nhello world"
pattern = r"world$"
match1 = re.search(pattern, string1, re.MULTILINE)
match2 = re.search(pattern, string2, re.MULTILINE)
if match1:
print("string1以world结尾")
else:
print("string1不以world结尾")
if match2:
print("string2以world结尾")
else:
print("string2不以world结尾")
输出结果为:
string1不以world结尾
string2以world结尾
在第二段代码中,由于字符串中存在换行符,我们在re.search方法中添加re.MULTILINE标记,表示强制$匹配字符串的结尾。最后输出的结果与期望相符。
匹配空白行
有时候我们可能需要匹配一段话中的空行,可以通过正则表达式中的^\s$实现。其中,^\s表示以若干个空白字符(包括空格、制表符、换行符等)开头,$表示以若干个空白字符结尾,两者之间可以没有其他字符。例如:
import re
string1 = "hello world\n\n\nhello everybody"
string2 = "world hello\nhello world"
pattern = r"^\s*$"
match1 = re.search(pattern, string1, re.MULTILINE)
match2 = re.search(pattern, string2, re.MULTILINE)
if match1:
print("string1包含空白行")
else:
print("string1不包含空白行")
if match2:
print("string2包含空白行")
else:
print("string2不包含空白行")
输出结果为:
string1包含空白行
string2不包含空白行
在上述代码中,我们将正则表达式模式定为^\s$,其中\s表示空白字符,表示零个或多个空白字符。通过re.search方法在指定字符串中进行匹配,并返回一个Match对象,最后判断是否匹配成功,如果成功则输出包含空白行的字符串。
结论
在Python中使用正则表达式匹配字符串的开头和结尾较为常见,我们可以使用^标记匹配开头、$标记匹配结尾,也可以添加re.MULTILINE标记处理换行符的情况。同时,我们还可以使用正则表达式匹配空白行,以实现更加灵活的字符串操作。