在Python中处理正则表达式中的字符反斜杠和花括号

2024-06-23 18:45:17 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用正则表达式来识别.tex文件中包含\begin{frame}的行。以下是我的代码:

#!/usr/bin/python

import re,sys

def isEven(num):
    res = [False,True][bool(num % 2 == 0)]
    return res

textin = open(sys.argv[1]).readlines()
nline = 0
pat = r'\b\begin{frame}\b'
for line in textin:
    line = line.strip(' ')
    #print 'Test: ',line[:13]
    if re.match(pat,line):
        print 'here'
        nline += 1
    if isEven(nline):
        print '%',line.strip('\n')
    else:
        print line.strip('\n')

这个程序的目的是在tex文件的行之前添加字符“%”,如果帧数是偶数。换句话说,我想对幻灯片编号为偶数的幻灯片进行注释。

你知道这个图案有什么问题吗?在


Tags: 文件resyslineresframenumtex
1条回答
网友
1楼 · 发布于 2024-06-23 18:45:17

再看看你的图案串:

r'\b\begin{frame}\b'

注意它以'\b\b'开头。你的意思是第一个作为词的边界,第二个作为你想要匹配的部分,但是re怎么可能猜出你每一个的意思?!在

我不认为你需要词的边界,顺便说一句,他们可能会搞乱匹配。而且,re.match只在开头匹配;因为在Q的文本中,您说的是“contain”,而不是“start with”,所以实际上您可能想要re.search。在

要匹配反斜杠,需要在模式中加倍。你可以用一个反斜杠来转义标点符号,比如大括号。在

所以我建议…:

^{pr2}$

我已经做了一些改进,但是它们与你的Q没有直接关系(例如,使用with打开文件,逐行循环;完全剥离每行空白,一次,而不是分期付款;等等,但是你没有使用任何这些:-). 在

相关问题 更多 >

    热门问题