Python正则表达式的使用问题
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python正则表达式的使用问题相关的知识,希望对你有一定的参考价值。
我在做一个实验的时候出现了一个问题,当用以下两种正则表达式去匹配一段输入的英文的时候 ,如:'[aeiou][a-z]*'
'[bcdfghjklmnpqrstvwxyz][a-z]*' 我输入asd测试时,不仅前面的元音字母开头会检索到返回 asd,后面的辅音字母开头的检索也会返回
sd,这显然是错误的,但如果用spilt将输入的句子分开,会形成list,正则表达式又不能处理list,请问怎么解决这种问题?
p1 = re.compile(r\'^[aeiou][a-z]*\')
p2 = re.compile(r\'^![aeiou][a-z]*\')
m = p1.search(\'asd\')
n = p2.search(\'asd\')
print m
print n
result:
<_sre.SRE_Match object at 0x0212B598>
None
说明第一个匹配成功,第二个匹配失败
你的正则有问题,如果要匹配首字母需要用 ‘^’
追问不是,我是要在一段英文中筛选,如果加了^像how are you 的are不就不行了?
追答那你的意思是统计每个单词 ,有多少是元音字母开头,辅音字母开头的?
data = \'how are you?\'#你要筛选的英文
l = data.split(\' \')
p1 = re.compile(r\'^[aeiou][a-z]*\')
p2 = re.compile(r\'^![aeiou][a-z]*\')
i = 0
j = 0
for e in l:
m = p1.search(e)
n = p2.search(e)
if m:
i += 1
if n:
j += 1
print \'there are %d words begin with [aeiou]\' % i
print \'there are %d words do not begin with [aeiou]\' % j
不要什么都用正则,简单实用的方法最好。首先,图片中的不是Python吧,若这只是结果,而你打算用Python处理,那么可以把var express_user=后面的内容赋值给A,即temp='express_user=' + A;然后exec(temp),这样express_user就是一个列表,就很好处理了。
A = ''''''#A中存图片中你要处理的express_user的内容temp = 'express_user=' + Aexec(temp)#for i in express_user: dispid, sex, age, height, income = i['dispid'],i['sex'],i['age'],i['height'],i['income']
希望能解决您的问题。追问
题目要求用正则...
在 Python 正则表达式中使用变量 [重复]
【中文标题】在 Python 正则表达式中使用变量 [重复]【英文标题】:Using variables in Python regular expression [duplicate] 【发布时间】:2011-08-19 12:44:51 【问题描述】:我正在解析一个文件并在 username-#
的行中查找用户名将更改的行,并且破折号后可以有任意数量的数字 [0-9]
。
我尝试了几乎所有组合,试图在正则表达式中使用变量username
。
我什至接近re.compile('%s-\d*'%user)
之类的东西吗?
【问题讨论】:
【参考方案1】:怎么样:
re.compile(user + '-\d*')
【讨论】:
【参考方案2】:按照应有的方式工作:
>>> user = 'heinz'
>>> import re
>>> regex = re.compile('%s-\d*'%user)
>>> regex.match('heinz-1')
<_sre.SRE_Match object at 0x2b27a18e3f38>
>>> regex.match('heinz-11')
<_sre.SRE_Match object at 0x2b27a2f7c030>
>>> regex.match('heinz-12345')
<_sre.SRE_Match object at 0x2b27a18e3f38>
>>> regex.match('foo-12345')
【讨论】:
我现在觉得自己很蠢。那么为什么当我尝试在 pdb 中断中创建它时它给了我一个语法错误 在 python 调试器中,它不允许我在单步执行时创建它。调试器不是普通的python解释器吗? docs.python.org/library/pdb.html 你在说什么?代码是从交互式控制台复制粘贴的吗?您是否尝试在调试器中复制粘贴的代码? 确保使用re.escape()
@Steven 在他的回答中说。例如。 regex = re.compile('%s-\d*'%re.escape(user))
.【参考方案3】:
您可以使用字符串的 .format() 方法创建字符串:
re.compile('-\d*'.format(user))
【讨论】:
【参考方案4】:是的,自己连接正则表达式,或使用字符串格式。但是,如果您的变量可能包含在正则表达式中具有特殊含义的字符,请不要忘记使用 re.escape()。
【讨论】:
以上是关于Python正则表达式的使用问题的主要内容,如果未能解决你的问题,请参考以下文章