findallpython
A. python 34:正则表达式的search()方法和findall()方法得到的值
search()方法得到的值,其类型是re.Match对象。
findall()方法得到的值,其类型是list。
search()方法得到的值,其类型是对象re.Match。这个对象有自己的方法。
其中最常用的两个方法是group()和groups()。
group()方法的参数为一个非负整数。
group(0)是匹配字符串,group(1)为其第一个分组,group(2)为第二个分组,余类推。如果没有相应的分组,则抛出异常。
groups()可以有参数,也可以没有参数,其值与参数无关,所以就用无参数的形式。它的值为一个元组,其元素为所有分组。注意groups()的元素中不一定有匹配字符串,它只是所有分组。可以将整个正则表达式作为一个分组(在最外面加圆括号),这样其第一个元素就是匹配字符串。
findall()得到的值是一个列表。
这个列表的元素都是元组,每一个元组对应一个匹配,是这个匹配的所有分组。每一个元组与search()得到的值的groups()方法的值的性质一样。同样,元组中的元素不一定有匹配字符串,它们只是所有分组。可以将整个正则表达式作为一个分组(在最外面加圆括号),这样其第一个元素就是匹配字符串。
B. python的findall函数调用总是出错,请教要怎么解决
我一般都是用math或者seach的,你可以试试。
re.match
re.match 尝试从字符串的开始匹配一个模式,如:下面的例子匹配第一个单词。
import retext ="JGood is a handsome boy, he is cool, clever, and so on..."
m = re.match(r"(\w+)\s", text)
if m:
print m.group(0), '\n', m.group(1)
else:
print'not match're.match的函数原型为:re.match(pattern, string, flags)第一个参数是正则表达式,这里为"(\w+)\s",如果匹配成功,则返回一个Match,否则返回一个None;第二个参数表示要匹配的字符串;第三个参数是标致位,用于控制正则表达式的匹配方式,如:是否区分大小写,多行匹配等等。re.searchre.search函数会在字符串内查找模式匹配,只到找到第一个匹配然后返回,如果字符串没有匹配,则返回None。import re
text ="JGood is a handsome boy, he is cool, clever, and so on..."
m = re.search(r'\shan(ds)ome\s', text)
if m:
print m.group(0), m.group(1)
else:
print'not search're.search的函数原型为: re.search(pattern, string, flags)每个参数的含意与re.match一样。 re.match与re.search的区别:re.match只匹配字符串的开始,如果字符串开始不符合正则表达式,则匹配失败,函数返回None;而re.search匹配整个字符串,直到找到一个匹配。
C. 说说在 Python 中,如何找出所有字符串匹配
Regex 对象有一个 findall() 方法,它会返回包含所查找字符串的所有匹配。这与 search() 方法明显不同,search() 将返回一个 Match 对象,其中包含被查找字符串中的 “ 第一次 ” 匹配文本。请看以下示例,注意区分:
运行结果:
如果调用 findall 的正则表达式不存在分组(比如上例),那么方法 findall() 将返回一个匹配字符串的列表,例如上例的 ['0591-83822032', '0591-83822033']。
如果调用 findall 的正则表达式存在分组,那么方法 findall() 将返回一个字符串元组的列表(每个分组对应一个字符串),请看下例:
运行结果:
D. python正则表达式findall的匹配问题
python的正则中用()会进行匹配,所以返回结果是['',''],就是两个()中的匹配。要想达到原来的匹配效果,就是把4匹配出来,有两种解决方法:
1.最外层加个大括号,变成:m = re.findall('(([0-9])*4([0-9])*)',
'[4]'),返回结果的第一个元素就是匹配结果了。
2.去除()的匹配结果返回,在括号前面加入?:,变成m =
re.findall('(?:\d)*4(?:\d)*', '[4]'),返回结果就是要匹配的结果了。
E. python中findall
这个是Python re正则模块
就是按照p规则匹配html的文本内容。
p的规则具体是什么意思,你要去学习Python 正则语法。
F. python的re,findall 忽略大小写
没那几个人说的那么麻烦,只需要加一个参数,如下:
import re
SHA = 'AC:B0:F3:26:EA:C1'
result1 = re.findall(r'ac:.*:c1',SHA) # 这样是搜不到的,因为大小写不匹配
result2 = re.findall(r'ac:.*:c1',SHA,re.IGNORECASE) # 这是能搜到的,已忽略大小写
print('未忽略大小写搜索结果:',result1)
print('忽略大小写搜索结果:',result2)
结果:
运行结果
G. 小白求助大神python中findall()和sub()的结果
第一个问题,你搞错了,不是逗号,是两个空字符串,返回的结果列比里其实有三个元素。虽然看起来很像两个。所以,它找到了符合条件的三个对象,也就是['section{First', '', ''] 。右大括号的位置是理解的关键。
第二个问题。sub方法是用你指定的字符串替换‘匹配’上的字符串。前面我们匹配上了3个位置,将它们逐一替换,就得到了'subsection{}subsection{}}subsection{}'。注意其中那个蹦单的右大括号。
第三个问题。你使用了sub的分组引用功能。它在替换的同时会用匹配上的内容替换‘1’。你在前面匹配上了一个字符串和两个空格,将它们依次代入问题二结果中的三对大括号就能得到最终结果'subsection{section{First}subsection{}}subsection{}'
更多内容参考正则表达式和re模块
H. 小白请教下python正则表达式findall()返回空值的问题
星号表示匹配0到任意次,因此多了两个0长度的字符,因为'}'匹配非}的任意字符0次
改成至少一次就得到你期待的结果,就是把*改成+
I. python findall 有时候能正常运行,有时候总是hang住,为什么
这里我们用了一个 Python的正则模块 re.findall来做字符串匹配解决这个问题.
看下正则的流程
- 首先说下什么是正则表达式, 正则其实就是对字符串特征的抽象!!!
- 当我们的字符串特性变化了,我们不需要大幅度修改程序,只要修改该特征结构就可以重新匹配我们要的字符.
这里我们用到了以下几种类型 正则表达式
- 字符
- 边界
- 特殊构造
回到题目 我们需要做的是将"("和")"之间的字符串匹配出来.
?<=[(] 代表 "(" 开始,但不一定是串首
?=[)] 代表 ")" 结束,但不一定是串尾
[^()]+.[^()]+ 代表 中间含 "."的字符串, "."是"."转义字符 "+"代表里面可以有1个"."或无数个"."
- 最后代码片断:
import re
re.findall("(?<=[(])[^()]+.[^()]+(?=[)])",text)