首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >正则表达式:如果字符串本身包含转义的斜杠,则匹配两个斜杠之间的字符串

正则表达式:如果字符串本身包含转义的斜杠,则匹配两个斜杠之间的字符串
EN

Stack Overflow用户
提问于 2011-12-12 19:50:18
回答 1查看 11.7K关注 0票数 7

我正在尝试构建一个正则表达式,它匹配两个正斜杠之间的正则表达式。我的主要问题是正则表达式本身可以包含正斜杠,通过反斜杠进行转义。我试图用一个负的回溯断言过滤掉它们(只有在当前位置没有反斜杠的情况下才匹配结束斜杠),然而,现在我遇到了一个问题,如果正则表达式本身实际上以一个转义的反斜杠结束,我就得不到匹配。

测试程序:

代码语言:javascript
运行
复制
#!/usr/bin/python
import re
teststrings=[
     """/hello world/""", 
     """/string with foreslash here \/ and here\//""",
     """/this one ends with backlash\\\\/"""]

patt="""^\/(?P<pattern>.*)(?<!\\\\)\/$"""

for t in teststrings:
    m=re.match(patt,t)
    if m!=None:
        print t,' => MATCH'
    else:
        print t," => NO MATCH"

输出:

代码语言:javascript
运行
复制
/hello world/  => MATCH
/string with foreslash here \/ and here\//  => MATCH
/this one ends with backlash\\/  => NO MATCH

如果在当前位置只有一个反冲,而不是两个反冲,我如何修改断言以仅命中?

或者是否有更好的方法来提取正则表达式?(请注意,在实际的文件中,我尝试解析的行不仅仅包含regex。我不能简单地搜索每行的第一个和最后一个斜杠,然后得到中间的所有内容。)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-12-12 19:55:57

试试这个:

代码语言:javascript
运行
复制
pattern = re.compile(r"^/(?:\\.|[^/\\])*/")

说明:

代码语言:javascript
运行
复制
^       # Start of string
/       # Match /
(?:     # Match either...
 \\.    # an escaped character
|       # or
 [^/\\] # any character except slash/backslash
)*      # any number of times.
/       # Match /

对于您的“真实”应用程序(查找第一个“斜杠分隔的字符串”,忽略转义斜杠),我将使用

代码语言:javascript
运行
复制
pattern = re.compile(r"^(?:\\.|[^/\\])*/((?:\\.|[^/\\])*)/")

这将为您提供以下内容:

代码语言:javascript
运行
复制
>>> pattern.match("foo /bar/ baz").group(1)
'bar'
>>> pattern.match("foo /bar\/bam/ baz").group(1)
'bar\\/bam'
>>> pattern.match("foo /bar/bam/ baz").group(1)
'bar'
>>> pattern.match("foo\/oof /bar\/bam/ baz").group(1)
'bar\\/bam'
票数 17
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8473853

复制
相关文章

相似问题

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