繁体   English   中英

带有转义单引号的单引号字符串上的Python正则表达式

[英]Python regular expression on single quoted string with escaped single quotes

假设我们有这样的输入(这是一个示例,无论是否有意义):

data = "(((column_1 + 7.45) * 3) <>    column_2 - ('string\'1' / 2))"

好吧,我需要使用Python re模块匹配一个字符串,该字符串以'开头和结尾,并且可能包含上述转义的单引号。 因此结果应为string\\'1 我们如何实现呢?

编辑:我正在使用PLY库,用法应该是

def t_leftOperand_arithmetic_rightOperand_STRING(self, t):
    r'<regex>'
    t.lexer.pop_state()
    return t

我相信您也必须考虑逃脱的逃生。

为此,您需要'[^'\\\\]*(?:\\\\[\\S\\s][^'\\\\]*)*'


输入

'''Set 1 - this
is another
mul\'tiline
string'''
'''Set 2 - this
is' a\\nother
mul\'''tiline
st''ring'''

基准测试:

Regex1:   '[^'\\]*(?:\\[\S\s][^'\\]*)*'
Options:  < none >
Completed iterations:   400  /  400     ( x 1000 )
Matches found per iteration:   9
Elapsed Time:    5.00 s,   4995.27 ms,   4995267 µs


Regex2:   '(?:[^'\\]|\\.)*'
Options:  < s >
Completed iterations:   400  /  400     ( x 1000 )
Matches found per iteration:   9
Elapsed Time:    7.00 s,   7000.68 ms,   7000680 µs

其他正则表达式(仅用于测试。正如@ridgerunner所说,这可能会导致回溯问题)

Regex2:   '(?:[^'\\]+|\\.)*'
Options:  < s >
Completed iterations:   400  /  400     ( x 1000 )
Matches found per iteration:   9
Elapsed Time:    5.45 s,   5449.72 ms,   5449716 µs

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM