python中正则表达式 的匹配问题,谢谢!
有一个列表文件docname,里面有如下内容(格式有两种随机情况):
docname=培训教材1.doc
docname*=UTF-8''培训教材2.doc
...
如何用一个re表达式匹配以上两种情况?谢谢
(不想用两个表达式,感觉挺麻烦)
我试了下面的这个
compiler = re.compile(r'docname(\*?)=(UTF-8\'\'?)(.*)')
docname_0 = compiler.search(docname).group(3)
但是只能匹配第二种带*号的情况,与我设想的不同,不明白什么原因,我看正则表达式里面,“?”是匹配0或1次,是理解错误?谢谢!
docname.+\.doc
以docname开头、以.doc结尾,中间任意字符至少匹配一次
试试这个? str(re.findall("=(.*?).doc", x)).replace("UTF-8'\'", "") 代码
```
import re
str = """docname=培训教材1.doc
docname*=UTF-8''培训教材2.doc"""
result = re.findall(r'=(.*?).doc', str)
print(result)
```
截图
compiler = re.compile(r'docname(\*?)=(UTF-8\'\'?)(.*)')
这句正则,是因为匹配多加了一个 (UTF-8\'\'?)(.*),这个的意思是匹配 UTF-8'' 或者 UTF-8''',当然只能匹配第二条,
前面的docname(\*?)正则没毛病
如果你非要这么写,正确的写法:
t1 = "docname=培训教材1.doc"
t2 = "docname*=UTF-8''培训教材2.doc"
for t in :
print(re.search(r"docname(\*?)=(UTF\-8\'\'|)", t))
你的点Z是我回答的动力
你的问号应该在第二个小括号外边,这样才表示小括号内的数据出现0次或1次。
你的问号在小括号里边只表示问号前的引号出现0次或1次。 本帖最后由 xuanmuluck 于 2022-10-12 10:14 编辑
s1='docname=培训教材1.doc'
s2="docname*=UTF-8''培训教材2.doc"
re.findall("docname\*?=(?:UTF-8\'\')?(.*?)\.doc",s2)
re.findall("docname\*?=(?:UTF-8\'\')?(.*?)\.doc",s1)
基础不扎实,而且你要匹配啥也没说清楚 bobo2017365 发表于 2022-10-12 09:52
compiler = re.compile(r'docname(\*?)=(UTF-8\'\'?)(.*)')
这句正则,是因为匹配多加了一个 (UTF-8\'\'?) ...
还是要多学习,问题解决了。谢谢。 你这理解错了好几处,re.search只匹配一次, \是转义符,\*就是*字符
xuanmuluck 发表于 2022-10-12 10:11
s1='docname=培训教材1.doc'
s2="docname*=UTF-8''培训教材2.doc"
确实是学的不扎实。
(?:UTF-8\'\')?
这个写法,能给解释下么,谢谢!
页:
[1]
2