python中的正则表达式,%

时间:2013-01-06 10:05:08

标签: python regex

我不熟悉正则表达式,但我找不到关于%字符的特殊规则。

我执行以下操作:

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

5 个答案:

答案 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)

正则表达式中的

?是量词,意思是:

  

? 的   匹配前一个元素零次或一次。

匹配?字符,您必须使用\?(字符转义)或[?](字符组)