记录一下操作步骤,懒得翻代码,复制使用。
1.获取字符串中首个数字的开始结束位置。
例如:asd2312ssa213sda
import re
content =content.replace(" ","")
model = re.compile("[0-9]+")
if model.search(content) is not None:
pos = model.search(content).span()
return int(content[pos[0]:pos[1]])
反馈 :2312
[0-9]+ :表示匹配数字开头直到不是数字的子字符,+为贪婪
findall
提取关键字,如提取
D#2019-01-01 阿达 asd a
中的2019 01 01:
result = re.findall('D#([0-9]*)-([0-9]*)-([0-9]*)', self.VarValue)
if result:
print(result)
for res in result:
print(res[0], res[1], res[2])
这里注意!!!
D#([0-9]*)-([0-9]*)-([0-9]*) 的每个【0-9】*外面添加的小括号是为了在匹配整个D#2019-01-01之后,使用findall获取的实际不是整个字符串,而是字符串中的括号内规则的字符
2.获取字符串中所有数字
想要获取所有匹配的数字列表是十分简单的:
content ="1uhi2uhi2h2ih3uh4"
model = re.compile("[0-9]+")
retlist = model.findall(content)
print retlist
反馈就是['1','2','2','2','3','4'].
3.匹配变量名称
变量能用数字加上字母与下划线组成,sd_1等等,从不规范的代码中获取其特定变量的位置。
要求:匹配所有制定变量并修改其名称。
CONTINUOUSUPDATE := 2.3,AAA:= Q2, OUTAAA => Q2);Q1.AAA:=Q2;Q2 := Q1.OUTAXIS;
AAA11 :=2;AAA:= 4;
例如匹配AAA变量修改为BBB
代码如下:
remodel5 = re.compile(r"\WAAA(?:\s)*:=(?:\s)*\w+")
list5 = remodel5.findall(mycon)
if len(list5) >0:
for i in list5:
xxx
print i
有可能代码比较乱,以上匹配结果是:
,AAA:= Q2
.AAA:=Q2
;AAA:= 4
\W:不是数字字母和下划线 (\s)* 任意个空格 \w+ 一个数字字母下划线组成的字符串。如果想要匹配C变量格式的可以使用“
[a-zA-Z_]\w*
”
然后使用python的replace函数进行循环替换即可。但是如果使用re.sub()会更加简单:
import re
str1 = "CONTINUOUSUPDATE := 2.3,AAA:= Q2, OUTAAA => Q2);Q1.AAA:=Q2;Q2 := Q1.OUTAXIS;AAA11 :=2;AAA:= 4;"
str2 = re.sub(r"(\bAAA\b)",r"\1BBB",str1)
print str1
print str2
CONTINUOUSUPDATE := 2.3,AAA:= Q2, OUTAAA => Q2);Q1.AAA:=Q2;Q2 := Q1.OUTAXIS;AAA11 :=2;AAA:= 4;
CONTINUOUSUPDATE := 2.3,AAABBB:= Q2, OUTAAA => Q2);Q1.AAABBB:=Q2;Q2 := Q1.OUTAXIS;AAA11 :=2;AAABBB:= 4;
注意re.sub()中的“\1”的作用是第一个正则参数的每一个使用小括号()括起来的内容。
4.字符串分割split
有了对字符串分割的目的,使用re.split就自然而然了。
基本用法:
>>> s= "qweqwabqwesabfefweabtewgfsabsda"
>>> ret = re.split("ab",s)
>>> ret
['qweqw', 'qwes', 'fefwe', 'tewgfs', 'sda']
将例子中的“ab”作为分割符可以分为多个列表字符串。
保留匹配的部分数据:
['qweqw', 'qwes', 'fefwe', 'tewgfs', 'sda']
>>> ret = re.split("a(b)",s)
>>> ret
['qweqw', 'b', 'qwes', 'b', 'fefwe', 'b', 'tewgfs', 'b', 'sda']
这里使用小括号,可以单独作为一个字符串写入返回的列表中。
注意点:
1.在python代码中使用(),需要加上?:变成(?:***)使用!不然list5会有两个空格元素!
2.使用匹配小数点的时候,需要加上[],即 [.]表示匹配小数点,而.可以匹配很多种字符。