匹配特定字符序列的Python正则表达式
我是Python正则表达式的基本用户,需要一些专家的建议 使用正则表达式解决问题 我试图用以下一组规则从字符串中提取一些信息匹配特定字符序列的Python正则表达式,python,regex,python-2.6,Python,Regex,Python 2.6,我是Python正则表达式的基本用户,需要一些专家的建议 使用正则表达式解决问题 我试图用以下一组规则从字符串中提取一些信息 以$( 开始标记后必须有一个单词 或者,它可能包含以下单词 除了'和“[如果单独使用而不是成对使用]以外的任何字符,直到结束字符) “和”[如果单独使用而不是成对使用]仅当使用\进行转义时才允许使用 如果包含在“或”中,甚至可能允许) 以结尾) 作为一种解决方案,如果允许在字符集[]内定义和使用特殊类型的字符,这将很容易 例如: re.compile("""\$\((
- 除了'和“[如果单独使用而不是成对使用]以外的任何字符,直到结束字符)
- “和”[如果单独使用而不是成对使用]仅当使用\进行转义时才允许使用
- 如果包含在“或”中,甚至可能允许)
re.compile("""\$\((\w*)
[(any characters except ' and " [if used singly not in pairs] )
(' and " [if used singly not in pairs] are allowed only if escaped using a \)
( even ) if enclosed within '' or "")
]\)""", re.VERBOSE)
一些测试:
- 此$(listInput)尾部->listInput
- 此$(listInput:DS)尾部->listInput:DS
- 此$(listInput:J=“)”:S=.o)尾部->listInput:J=“)”:S=.o
- 此$(listInput:J=join'with)tail->listInput:J=join'with
谢谢这一个似乎满足了你的要求:
^\$\(\w(?::\w |[^]\\']|“[^”]*“|”[^']*“|”[^']*”)\)
细分:
^#字符串的开头
\$\( # "$("
(#启动第1组
\w#一个单词字符
(?:#启动非捕获组,其中一个:
\w#一个单词字符
|#或
[^)\\“']\\\\除“)”以外的任何字符和特殊字符
|#或
“[^”]*”#双引号部分
|#或
“[^”]*”#单引号部分
|#或
\\“#反斜杠转义为双引号
|#或
\\“#反斜杠转义为单引号
)*#终端组,重复
)#终端组1
\) # ")"
它符合您的示例要求
缺点:
- 在没有更好的“word”规范的情况下,我使用了
。熟悉\w
匹配的内容,必要时使用更具体的内容\w
- 不允许引用嵌套。(这是Python正则表达式无法做到的)
- 它在引用的部分中使用结束引号。需要更多信息才能正确执行此操作
- 引用的节中没有转义引号(尽管可以添加)
谢谢@Tomalak,你的解决方案如我所料帮了我大忙。
regex = re.compile("^\$\((\w(?:\w|[^)\\\"']|\"[^\"]*\"|'[^']*'|\\\"|\\')*)\)")
string = "$(listInput:J=join\'with) tail"
r = regex.search(string)
r.groups()
# -> (u"listInput:J=join\\'with",)
regex.findall(string)
# -> [u"listInput:J=join\\'with"]