我不熟悉正则表达式,但我找不到关于%
字符的特殊规则。
我执行以下操作:
line = parseFileHandle.readline()
while 1:
line = parseFileHandle.readline()
if not line:
break
# test for string '%%?'
match = re.match("%%?", line)
if match:
print (line)
然而,打印出以%
字符开头的任何行。那不是我想要的。
最后我想找出这个表格中文件中的文件名(myfile.tex)
%%? file: myfile.tex
答案 0 :(得分:5)
问题不在于%
。 ?
具有特殊意义:它使第二个%
成为可选项。因此,您的正则表达式将匹配%
和%%
。
以下正则表达式应该有效:
match = re.match("%%[?]", line)
如果您在行的开头搜索%%?
,则不需要正则表达式。以下将实现相同的目标:
if line.startswith("%%?"):
答案 1 :(得分:4)
.startswith()
可能是最好的功能。你这里不需要正则表达式。
此外,它看起来像是以一种稍微奇怪的方式读取文件。通常的语法是:
with open('filename.txt', 'r') as handle:
for line in handle:
if line.startswith('%%?'):
print(line)
答案 2 :(得分:1)
可以使用正则表达式从列表中提取文件名:
exp = re.compile("^%%\? file: ([^ \n]+)$")
with open('filename.txt', 'r') as myfile:
for line in myfile:
match = exp.match(line)
if match:
print(match.group(1))
正如其他人所指出的那样,你需要在原始尝试中逃避?
字符 - 因为它在正则表达式中具有特殊含义。
答案 3 :(得分:0)
if line.startswith('%%?'):
# do something
很可能是你想要的
答案 4 :(得分:0)
?
是量词,意思是:
的
?
强> 的 匹配前一个元素零次或一次。
匹配?
字符,您必须使用\?
(字符转义)或[?]
(字符组)