我想将文本块转换为带有正则表达式的单行条目数据库的数据库。但我不知道为什么正则表达集团没有得到认可。 也许是因为多线标志没有正确设置。 我是python的初学者。
import re
with open("a-j-0101.txt", encoding="cp1252") as f:
start=1
ecx=r"(?P<entrcnt>[0-9]{1,3}) célébrités ou évènements"
ec1=""
nmx=r"(?P<ename>.+)\r\nAfficher le.*"
nm1=""
for line in f:
if start == 1:
out = open('AST0101.txt' + ".txt", "w", encoding="cp1252") #utf8 cp1252
ec1 = re.search(ecx,line)
out.write(ec1.group("entrcnt"))
start=0
out.write(r"\r\n")
nm1 = re.search(nmx,line, re.M)
out.write(str(nm1.group("ename")).rstrip('\r\n'))
out.close()
但我收到错误:
File "C:\work-python\transform-asth-b.py", line 16, in <module>
out.write(str(nm1.group("ename")).rstrip('\r\n'))
builtins.AttributeError: 'NoneType' object has no attribute 'group'
这是输入:
210 célébrités ou évènements ont été trouvés pour la date du 1er janvier.
Création de l'euro
Afficher le...
...
...
...
预期产出:
210
Création de l'euro ;...
... ;...
... ;...
编辑:我尝试更改nmx以匹配\ n或\ r \ n但没有结果:
nmx=r"(?P<ename>.+)(\n|\r\n)Afficher le"
最好的问候
答案 0 :(得分:2)
在此声明中:
nm1 = re.search(nmx,line, re.M)
你得到一个NoneType对象(nm1 =无),因为找不到匹配项。因此,对nmx属性进行更多调查,为什么在正则表达式中没有匹配。
顺便说一句,如果可以获得NoneType对象,可以通过阻止NoneType来避免这种情况:
If nm1 is not None:
out.write(str(nm1.group("ename")).rstrip('\r\n'))
else:
#handle your NoneType case
答案 1 :(得分:1)
如果您一次只读一行,则正则表达式无法匹配您之前阅读过然后遗忘的行。
如果您读取了一组行,则可以将正则表达式应用于行集合,并且多行标记将执行一些有用的操作。但是您当前的代码应该只是搜索t1.loadFromFile("images/board.png");
并使用状态机(r'^Afficher le\.\.\.'
或start == 0
)在正确的上下文中执行此操作。