首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >python regexp字符集的反斜杠(如何指定'not a backslash‘字符集)?

python regexp字符集的反斜杠(如何指定'not a backslash‘字符集)?
EN

Stack Overflow用户
提问于 2012-11-14 01:00:29
回答 2查看 1.4K关注 0票数 5

我想使用python regexp来删除LaTeX文件中的注释。在LaTeX中,注释以"%“开头。但是如果%字符被转义("\%"),那么它不是一个注释,而是符号百分比。

这个任务只是我在LaTeX文本上应用的众多正则表达式中的一个。我将所有这些reg exp存储在一个字典列表中。

我面临的问题是,我用来修剪注释的regexp不起作用(因为我不知道如何指定字符集“非反斜杠”)。字符集中的反斜杠转义了闭合的']‘,并且regexp不正确。

我的代码:

代码语言:javascript
复制
regexps=[]
regexps.append({r'left':'%.*', 'right':r''}) # this strips all the comments, but messes up with the percent characters (\%)
regexps.append({r'left':'[^\]%.*', 'right':r''}) # this is incorrect (escapes the closing "]" )
return applyRegexps(latexText, regexps)


def applyRegexps(text, listRegExp):
    """ Applies successively many regexps to a text"""
    if testMode:
        print str(listRegExp)
    # apply all the regexps in the list
    for element in listRegExp:
        left = element['left']
        right = element['right']
        r=re.compile(left)
        text=r.sub(right,text)
    return text

任何帮助都将不胜感激。谢谢!

吉尔斯

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-11-14 01:03:19

只需将反斜杠加倍,但一定要使用原始字符串文字,以避免再次将其加倍

代码语言:javascript
复制
regexps.append({'left':r'[^\\]%.*', 'right':r''})
票数 5
EN

Stack Overflow用户

发布于 2012-11-14 01:16:46

虽然Martijn的答案就是你想要的,但我不确定这是不是你真正想要的。例如,此模式不会匹配%作为字符串的第一个字符(因为它前面没有非反斜杠字符)。你真正想要的可能是一个负的前视(你仍然需要转义反斜杠):

代码语言:javascript
复制
r'(?<!\\)%.*'

区别在于:

  • [^\\]%匹配前面有非反斜杠字符的% (包括match)
  • (?<!\\)%中的该字符匹配前面没有反斜杠字符的% (不包括在匹配中)

后一种情况也适用于字符串开头的%

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13365179

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档