基本匹配及一些符号的特定含义
正则表达式是用于处理文本的强大工具,在Python中通过 re 模块来使用。
基本匹配
- 首先要导入 re 模块。例如,要在字符串中查找简单的单词 apple ,可以这样写:
import re
text = "I have an apple."
match_result = re.search("apple", text)
if match_result:print(match_result.group())
这里 re.search() 函数会在 text 字符串中查找 apple ,如果找到就返回一个匹配对象,通过 group() 方法获取匹配的内容。
元字符
- 点(.)元字符:它可以匹配除换行符 \n 之外的任何单个字符。例如, re.search("a.e", "ape") 会匹配成功,因为 ape 中的 p 被 . 匹配。
- 星号(*)元字符:表示前面的字符可以出现0次或多次。如 re.search("ab*", "a") 会匹配,因为 b 出现了0次; re.search("ab*", "abbb") 也会匹配,因为 b 出现了多次。
- 加号(+)元字符:前面的字符至少出现1次。例如 re.search("ab+", "ab") 匹配,而 re.search("ab+", "a") 不匹配。
字符集
- 用方括号 [] 来表示字符集。例如 [aeiou] 可以匹配任何一个元音字母。 re.search("[aeiou]", "apple") 会匹配 a 。也可以使用范围,如 [a - z] 匹配所有小写字母。
重复次数
- 可以使用 {n} 来指定前面的字符恰好出现 n 次。如 re.search("a{2}", "aa") 匹配, re.search("a{2}", "a") 不匹配。 {n, m} 表示前面的字符出现次数在 n 到 m 之间。
分组
- 用括号 () 来分组。例如 re.search("(ab)+", "abab") ,会将 ab 作为一个组,整个 abab 匹配成功是因为 ab 出现了两次。
匹配特定数字(含匹配内容中日期案例,输出第一个符合格式日期第一个数字的位置)
在正则表达式中匹配特定数字有多种方式。
1.如果要匹配一个具体的数字,比如数字 5 ,可以直接写 5 。例如在Python的 re 模块中, re.search("5", "abc5def") 就可以匹配到字符串中的 5 。
2.如果要匹配一定范围内的数字,可以使用字符集。例如,要匹配 0 - 9 的数字,可以使用 [0-9] 。如 re.search("[0-9]", "a7b") 会匹配到 7 。
3.要是匹配多位数字,可以结合重复次数的限定符。比如 \d{3} 可以匹配连续的3位数字, \d 表示数字字符(等同于 [0 - 9] ), {3} 表示前面的字符出现3次。例如 re.search("\d{3}", "abc123def") 会匹配 123 。
4.如果要匹配至少一位数字,可以用 \d+ 。例如 re.search("\d+", "a1b") 会匹配 1 。
案例
完整代码:
import re
def find_date(input_string):pattern = r'((19[7-9]\d|20[01]\d)-(0[1-9]|1[0-2]))'match=re.search(pattern,input_string)if match:return match.start()+1else:return -1
str=input()
print(find_date(str))
结果演示
输入:现在的日期是2005-05
输出:7
匹配浮点数
在Python中使用正则表达式匹配浮点数,有以下几种常见方法。
可以用 re 模块来匹配简单的浮点数。浮点数的基本形式是整数部分、小数点和小数部分。例如,匹配包含一位或多位数字、一个小数点和一位或多位数字的浮点数,可以使用 \d+\.\d+ 这个正则表达式模式。
import re
text = "3.14 is a pi value"
match_result = re.search("\d+\.\d+", text)
if match_result:print(match_result.group())
如果浮点数前面可能有正负号,可以将模式修改为 [+-]?\d+\.\d+ 。其中 [+-]? 表示正负号可能出现0次或1次。
text = "-2.5 is a number"
match_result = re.search("[+-]?\d+\.\d+", text)
if match_result:print(match_result.group())
此外,还可以匹配科学计数法表示的浮点数。科学计数法如 1.23e-4 ,模式可以是 [+-]?\d+\.\d+[eE][+-]?\d+ 。 [eE] 用于匹配指数符号 e 或 E ,后面 [+-]?\d+ 用于匹配指数部分。
text = "1.23e-4 is a scientific number"
match_result = re.search("[+-]?\d+\.\d+[eE][+-]?\d+", text)
if match_result:print(match_result.group())
转义特殊字符
在正则表达式中,有些字符有特殊含义,如 * 、 + 、 ? 、 ^ 、 $ 、 . 、 ( 、 ) 、 [ 、 ] 、 { 、 } 、 | 、 \ 。如果想匹配这些字符本身,就需要转义。
转义的方法是在特殊字符前面加反斜杠 \ 。例如,要匹配字符 * ,正则表达式应写成 \* 。
以Python的 re 模块为例,如果要在字符串中查找 $ 符号,可以这样写:
import re
text = "The price is $10."
match_result = re.search("\$", text)
if match_result:print(match_result.group())
另外,在某些编程语言的字符串字面量中,反斜杠 \ 本身也可能是转义字符。所以在编写代码时,可能需要双重转义。例如在Python中, \\ 在字符串中表示 \ ,如果要匹配 \d ( d 不是转义后的特殊字符),在正则表达式字符串中要写成 \\d 。