import re
# re.match(表达式语法, 匹配的字符串)
"**** 1.1 一般字符 ****"
pattern = "python"
re.match(pattern, "python") # python
re.match(pattern, "python2.7") # python
"**** 1.2 . 万能匹配字符 ****"
pattern = "python."
re.match(pattern, "python2") # python2
re.match(pattern, "python3") # python3
re.match(pattern, "python3.7") # python3
re.match(pattern, "python\n") # None (无法匹配)
re.match(pattern, "python\n", re.S) # python\n
"**** 1.3 \ 正则转义字符 ****"
pattern = "\.\*\?\+\^\$"
re.match(pattern, ".*?+^$abcd") # .*?+^$
# 匹配一个反斜线字符\
# 字符串中表示单个反斜线
len("\\") # 1
pattern = "\\\\" # 正则中表示单个反斜线
re.match(pattern, "\\") # \
# r作用:将字符串转为纯正则模式,忽略字符串对其的干扰
pattern = r"\\" # 正则中表示单个反斜线
re.match(pattern, "\\") # \
"**** 1.4 中括号字符集里的特殊符号将失去所有特殊含义,除了\ ****"
pattern = "[.*?+^$]"
re.match(pattern, "*")
re.match(pattern, "$")
# 但当位于首位的^、作为连字符的-、]具备单独的含义
re.match("[a-z]", str1) # 只匹配小写字母
re.match("[^a-z]", str2) # 只匹配非小写字母
re.match("[\^a-z]", str3) # 只匹配以小写字母或^
re.match("[a\-z]","-") # 只匹配a、-、z 这三个字母
re.match("[\]]","]") # 只匹配"]"
#---------------------------------------
re.match("\d+\.\d{2,6}", "3.1415926") # 3.141592
re.match("\d+\.\d{2,6}?", "3.1415926") # 3.14
#---------------------------------------
# \b相当于\w和\W的边界,可以用来匹配出单词;\B则常用来判断单词的连贯性
re.match(r"\w\W\w", "q q") # q q
re.match(r"\w\b\W\b\w", "q q") # q q
re.match(r"\w+\b\W+\b\w+", "hello-world") # hello-world
re.match(r"\w+\b\W+\b\w+", "hello - -- -world") # hello - -- -world
# 注意:必须使用r,将字符串变为正则模式,因为\b在普通字符串中也是具有含义的
re.match(r"Tom\B[A-Z][a-z]+", "TomCruise") # 可以匹配
re.match(r"Tom\B[A-Z][a-z]+", "Tom Cruise") # 无法匹配
#---------------------------------------
"**** 6.1 (?aiLmsux) 作用:替换flags参数 ****"
re.match(r"(?i)ABCD", "abcd") # abcd
re.match(r"ABcd", "abcd", flags=re.I) # abcd
"**** 6.2 (?:...) 作用:进行匹配,但不计入分组 ****")
re.match(r"(ab)(cd)", "abcd").group(1) # ab
re.match(r"(?:ab)(cd)", "abcd").group(1) # cd
"**** 6.3 (?imsx-imsx:...) 作用:为组内设置或去除flags效果 ****"
# Python3.6新增正则语法
re.match(r"(?i:AB)cd", "abcd") # abcd
re.match(r"(?-i:AB)cd", "abcd", flags=re.I) # 无法匹配
re.match(r"(?s-i:AB)cd", "abcd", flags=re.I) # 无法匹配
# 注意不能在内部即开启又关闭同一模式,如:i-i、imsx-imsx都是错误的
"**** 6.4 (?#...) 作用:添加注释 ****")
re.match(r"(?#这是注释)abcd", "abcd")
"**** 6.5 (?=...) 作用:向右正向断言匹配,后面如果是 ****"
# 后面如果是cd就匹配
re.match(r"\w+(?=cd)", "abcd") # 可以匹配 abcd
re.match(r"\w+(?=cd)", "abcf") # 无法匹配
"**** 6.6 (?!...) 作用:向右反向断言匹配,后面如果不是 ****"
# 后面如果不是cd就匹配
re.match(r"ab(?!cd)\w+", "abcd") # 无法匹配
re.match(r"ab(?!cd)\w+", "abcf") # 可以匹配 abcf
"**** 6.7 (?<=...) 作用:向左正向断言匹配,前面如果是 ****"
# 前面如果是ab就匹配
re.match(r"\w+(?<=ab)cd", "abcd") # 可以匹配 abcd
re.match(r"\w+(?<=ab)cd", "afcd") # 无法匹配
"**** 6.8 (?
# 后面如果不是ab就匹配
re.match(r"\w+(?, "abcd") # 无法匹配
re.match(r"\w+(?, "afcd") # 可以匹配 afcd
"**** 6.9 (?(id/name)yes-pattern|no-pattern) 作用:如果给定组存在,则使用yes规则,否则使用no规则 ****")
re.match(r"(<){0,1}abcd(?(1)>|)", "" ) # 可以匹配
re.match(r"(<){0,1}abcd(?(1)>|)", ") # 无法匹配
re.match(r"(<){0,1}abcd(?(1)>|)", "abcd") # 可以匹配 abcd
python正则模块
re模块
xpath学习文档
css选择器
bs4文档
jsonpath基础语法
jsonpath运算符
jsonpath函数(Python中jsonpath模块暂不支持该语法)
Python中执行JS代码,通常两个库: js2py、pyexecjs
import js2py
js2py.eval_js('console.log( "Hello World!" )')
# 'Hello World!'
func_js = '''
function add(a, b) {
return a + b
}
'''
add = js2py.eval_js(func_js)
print(add(1,2))
# 3