2022年7月16日

正则表达式需要转义的特殊字符

概述 正则表达式有以下特殊字符需要转义: 特别字符 说明 $ 匹配输入字符串的结尾位置。如果设置了RegExp对象的Multiline属性,则$也匹配‘\n'或‘\r'。要匹配$字符本身,请使用\$。 ( ) 标记一个子表达式的开始和结束位置。子表达式可以获取供以后使用。要匹配这些字符,请使用\(和\)。 * 匹配前面的子表达式零次或多次。要匹配*字符,请使用\*。 + 匹配前面的子表达式一次或多次。要匹配+字符,请使用\+。 . 匹配除换行符\n之外的任何单字符。要匹配.,请使用\。 [ ] 标记一个中括号表达式的开始。要匹配[,请使用\[。 ? 匹配前面的子表达式零次或一次,或指明一个非贪婪限定符。要匹配?字符,请使用\?。 \ 将下一个字符标记为或特殊字符、或原义字符、或向后引用、或八进制转义符。例如,‘n'匹配字符‘n'。'\n'匹配换行符。序…
2022年7月6日

正则表达式匹配分组

1. 匹配分组相关正则表达式 代码 功能 | 匹配左右任意一个表达式 (ab) 将括号中字符作为一个分组 \num 引用分组num匹配到的字符串 (?P<name>) 分组起别名 (?P=name) 引用别名为name分组匹配到的字符串 示例1:| 需求:在列表中["apple", "banana", "orange", "pear"],匹配apple和pear import re # 水果列表 fruit_list = ["apple", "banana", "orange", "pear"] # 遍历数据 for value in fruit_list: # | 匹配左右任意一个表达式 match_obj = re.match("apple|pear", value) if match_obj: print("%s是我想要的" % match_obj.group()) else: prin…
2022年6月12日

Python: 练习 正则表达式 匹配文件名/扩展名

# 匹配文件名 import re file_name0 = "123.test.abc.zip" file_name1 = ".test.abc.zip" file_name2 = ".zip" file_name3 = "test" re_ = r".*?(?=\.[^\.]*$)|[^\.]+" file_name_0 = re.match(re_, file_name0) file_name_1 = re.match(re_, file_name1) file_name_2 = re.match(re_, file_name2) file_name_3 = re.match(re_, file_name3) print(file_name_0) print(file_name_1) print(file_name_2) print(file_name_3) # 匹配扩展名 impor…
2022年6月12日

Python: 正则表达式 re模块

re --- 正则表达式操作¶ 源代码: Lib/re.py 这个模块提供了与 Perl 语言类似的正则表达式匹配操作。 模式和被搜索的字符串既可以是 Unicode 字符串 (str) ,也可以是8位字节串 (bytes)。 但是,Unicode 字符串与8位字节串不能混用:也就是说,你不能用一个字节串模式去匹配 Unicode 字符串,反之亦然;类似地,当进行替换操作时,替换字符串的类型也必须与所用的模式和搜索字符串的类型一致。 正则表达式使用反斜杠字符 ('\') 来表示特殊形式或是允许在使用特殊字符时不引发它们的特殊含义。 这会与 Python 的字符串字面值中对相同字符出于相同目的的用法产生冲突;例如,要匹配一个反斜杠字面值,用户可能必须写成 '\\\\' 来作为模式字符串,因为正则表达式必须为 \\,而每个反斜杠在普通 Python 字符串字面值中又必须…
2022年3月5日

Python: re.sub使用lambda函数作为参数

import re word_string = """ <head>iph</head> """ regular = "<.*?>((\w*)(<.*?>))" result = re.sub(regular, lambda x:x.group(2), word_string) print(result) 运行结果: iph Process finished with exit code 0…
2022年3月5日

正则表达式中(?:pattern)、(?=pattern)、(?!pattern)、(?<=pattern)和(?<!pattern)

(?:pattern)# ()表示捕获分组,()会把每个分组里的匹配的值保存起来,从左向右,以分组的左括号为标志,第一个出现的分组的组号为1,第二个为2,以此类推 (?:)表示非捕获分组,和捕获分组唯一的区别在于,非捕获分组匹配的值不会保存起来 import re a = "123abc456ww" pattern = "([0-9]*)([a-z]*)([0-9]*)" print(re.search(pattern,a).group(0,1,2,3)) pattern = "(?:[0-9]*)([a-z]*)([0-9]*)" print(re.search(pattern,a).group(0,1,2)) 可以看到 (?:[0-9]*) 匹配的第一个 [0-9]*  没有保存下来,即没有保存匹配到的“123”,而([0-9]*)则保存了下来。…
2022年3月5日

正则表达式不包含特定字符串

概述 做日志分析工作的经常需要跟成千上万的日志条目打交道,为了在庞大的数据量中找到特定模式的数据,常常需要编写很多复杂的正则表达式。例如枚举出日志文件中不包含某个特定字符串的条目,找出不以某个特定字符串打头的条目,等等。 使用否定式前瞻 正则表达式中有前瞻(Lookahead)和后顾(Lookbehind)的概念,这两个术语非常形象的描述了正则引擎的匹配行为。需要注意一点,正则表达式中的前和后和我们一般理解的前后有点不同。一段文本,我们一般习惯把文本开头的方向称作“前面”,文本末尾方向称为“后面”。但是对于正则表达式引擎来说,因为它是从文本头部向尾部开始解析的(可以通过正则选项控制解析方向),因此对于文本尾部方向,称为“前”,因为这个时候,正则引擎还没走到那块,而对文本头部方向,则称为“后”,因为正则引擎已经走过了那…
2022年3月5日

正则表达式匹配任意字符(包括换行符)

正则表达式中,“.”(点符号)匹配的是除了换行符“\n”以外的所有字符,但有时候我们需要匹配包括换行符在内的字符。 手册上还有一句话:要匹配包括 '\n' 在内的任何字符,请使用像 '[.\n]' 的模式,但是发现[.\n]*不可以。 经查,发现了几种正则表达式匹配任意字符(包括换行符)的方法: [\s\S]* [\d\D]* [\w\W]* 另外,[.\s]*不可以,(.|\s)*可以。…
2022年3月1日

正则表达式 Regular Expression Language - Quick Reference

https://docs.microsoft.com/en-us/dotnet/standard/base-types/regular-expression-language-quick-reference A regular expression is a pattern that the regular expression engine attempts to match in input text. A pattern consists of one or more character literals, operators, or constructs. For a brief introduction, see .NET Regular Expressions. Each section in this quick reference lists a particular category o…
2022年1月31日

正则表达式手册/常用正则表达式

正则表达式手册 字符 描述 \ 将下一个字符标记为一个特殊字符、或一个原义字符、或一个向后引用、或一个八进制转义符。例如,“n”匹配字符“n”。“\n”匹配一个换行符。串行“\\”匹配“\”而“\(”则匹配“(”。 ^ 匹配输入字符串的开始位置。如果设置了RegExp对象的Multiline属性,^也匹配“\n”或“\r”之后的位置。 $ 匹配输入字符串的结束位置。如果设置了RegExp对象的Multiline属性,$也匹配“\n”或“\r”之前的位置。 * 匹配前面的子表达式零次或多次。例如,zo*能匹配“z”以及“zoo”。*等价于{0,}。*具有贪婪的性质,首先匹配到不能匹配为止,根据后面的正则表达式,会进行回溯。*?则相反,一个匹配以后,就往下进行,所以不会进行回溯,具有最小匹配的性质。?表示非贪婪模式,即为匹配最近字符。…
ajax-loader