0

一般来说,我是正则表达式的新手,但我找不到关于%char 的特殊规则。

我执行以下操作:

line = parseFileHandle.readline()
while 1:
    line = parseFileHandle.readline()
    if not line:
        break
    # test for string '%%?'
    match = re.match("%%?", line)
    if match:
        print (line)

%但是,它会打印出任何以char开头的行。那不是我想要的。

最后我想以这种形式找出文件中的文件名(myfile.tex)

%%?  file: myfile.tex
4

5 回答 5

5

问题不在于%. 它?具有特殊含义:它使第二个%可选。因此,您的正则表达式将匹配%and %%

以下正则表达式应该可以工作:

match = re.match("%%[?]", line)

如果您在行首进行搜索%%?,则不需要正则表达式。以下将实现相同的目标:

if line.startswith("%%?"):
于 2013-01-06T10:06:40.130 回答
4

.startswith()在这种情况下可能是最好的功能。您在这里不需要正则表达式。

此外,您似乎正在以一种有点奇怪的方式读取文件。通常的语法是:

with open('filename.txt', 'r') as handle:
    for line in handle:
        if line.startswith('%%?'):
            print(line)
于 2013-01-06T10:09:07.303 回答
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))

正如其他人指出的那样,您需要?在最初的尝试中转义该字符 - 因为它在正则表达式中具有特殊含义。

于 2013-01-06T10:20:45.423 回答
0
if line.startswith('%%?'):
   # do something

很可能是你想要的

于 2013-01-06T10:07:11.167 回答
0

?在正则表达式中是量词和手段:

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

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

于 2013-01-06T10:26:21.260 回答