python 正则匹配引号中的内容_Python中正则表达式与模式匹配!

在之前找工作过程中,面试时经常被问到会不会python,懂不懂正则表达式。心里想:软件的东西和芯片设计有什么关系? 咱也不知道因为啥用这个,咱也不敢问啊! 在网上搜索到了一篇关于脚本在ASIC领域中应用的文章(原文见参考文献1),里边提到了python的用武之地:

f2088371c94507944130173f5c112b17.png


image

本文以《Python编程快速上手——让繁琐工作自动化》书中的示例,讲述利用python实现文本中特定内容提取的方式。

二、提取特定内容示例

需求:找出文本中所有的电话号码和邮件地址。设计方案:在剪贴板的文本中提取出所有与电话号码和邮件地址格式匹配的字符串。有了需求和设计方案,现根据电话号码和邮箱地址格式编写正则表达式。先来看看程序代码,再做讲解。

1 import pyperclip,re
 2 
 3 #phoneNumber:415-555-4242 x331
 4 #email address:info@nostarch.com
 5 
 6 phoneRegex = re.compile(r'''( #0 all
 7 (d{3}|(d{3}))? #1 area code
 8 (s|-|.)? #2 separator
 9 (d{3}) #3 first 3 digits
10 (s|-|.) #4 separator
11 (d{4}) #5 last 4 digits
12 (s*(ext|x|ext.)s*(d{2,5}))? #6 7 8extension
13 )''',re.VERBOSE)
14 
15 emailRegex = re.compile(r'''( #0 all
16 [a-zA-Z0-9._%+-]+ # username
17 @ # @ symbol
18 [a-zA-Z0-9.-]+ # domain name
19 (.[a-zA-Z]{2,4}) #1 dot-something
20 )''',re.VERBOSE)
21 
22 #Find matches in clipboard text.
23 text = str(pyperclip.paste())
24 mo1 = phoneRegex.findall(text)
25 mo2 = emailRegex.findall(text)
26 print(mo1)
27 print(mo2)
28 matches = []
29 for groups in phoneRegex.findall(text):
30 phoneNum = '-'.join([groups[1],groups[3],groups[5]])
31 if groups[8] != '':
32 phoneNum += ' x' + groups[8]
33 matches.append(phoneNum)
34 
35 for groups in emailRegex.findall(text):
36 matches.append(groups[0])
37 
38 #Copy results to the clipboard
39 if len(matches) > 0:
40 pyperclip.copy('n'.join(matches))
41 print('Copied to clipboard:')
42 print('n'.join(matches))
43 else:
44 print('No phone numbers or email address found.')

此处电话号码的格式是:三个数字组成的区号(可选),三个数字,四个数字,任意数空格+ext/x/ext.+任意数空格+2到5个数字组成的分机号(可选)。每个部分间以“-”号连接。邮箱地址格式:由字母、数字以及_%+-符号组成的用户名,@符号以及.后的域名,域名由2-4个字母和数字集合组成。根据上述模式可编写对应的正则表达式。

python的模式匹配有一个简单固定的套路,import导入re包,regex = re.compile('''<正则表达式>''')。<模式匹配的内容列表> = regex.findall(<待搜索字符串>)。三步搞定。编写正则表达式时,在字符串前加r防止字符转义。将各个部分分组并换行以提高代码的可读性,此时需要将re.VERBOSE作为re.compile()函数的第二个参数传入来忽略表达式中的空白和换行。

三、运行结果

复制代码首部注释掉的文本,然后运行程序。结果如下:

2620b1c03d30e3693f777d4e23fdf881.png


image

前两行打印出了匹配内容的列表,之后以自定义的统一格式打印欲搜索的内容。程序运行结果正确。本文以一个小例子测试了python正则表达式提取文本特定内容的功能,之后想尝试利用python自动生成verilogHDL中module的例化模板。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值