Python使用正则表达式获取特定数字等位置与其他的一些用法

记录一下操作步骤,懒得翻代码,复制使用。

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.使用匹配小数点的时候,需要加上[],即 [.]表示匹配小数点,而.可以匹配很多种字符。 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值