Python正则表达式的使用问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python正则表达式的使用问题相关的知识,希望对你有一定的参考价值。

我在做一个实验的时候出现了一个问题,当用以下两种正则表达式去匹配一段输入的英文的时候 ,如:'[aeiou][a-z]*'
'[bcdfghjklmnpqrstvwxyz][a-z]*' 我输入asd测试时,不仅前面的元音字母开头会检索到返回 asd,后面的辅音字母开头的检索也会返回
sd,这显然是错误的,但如果用spilt将输入的句子分开,会形成list,正则表达式又不能处理list,请问怎么解决这种问题?

import re
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

参考技术A 仅供参考,敬请指正。
不要什么都用正则,简单实用的方法最好。首先,图片中的不是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正则表达式的使用问题的主要内容,如果未能解决你的问题,请参考以下文章

正则表达式/Python:当正则表达式已经进行替换时,Python 中的替换

python:正则1

使用 Python 正则表达式提取数据

正则表达式 (python 2)

学会python正则表达式就是这么简单

正则表达式与Python中re模块的使用