【问题标题】:convert js regex into python regex将 js 正则表达式转换为 python 正则表达式
【发布时间】:2014-11-08 09:12:58
【问题描述】:

我正在处理一个项目的一部分,如果可能的话,它将用 https url 替换 http url。

问题是,它的正则表达式是为 javascript 正则表达式解析器编写的,但我在 python 中使用该正则表达式。为了兼容,我会在解析为验证 python 正则表达式时重写正则表达式。

例如,我给出了那个正则表达式:

https://$1wikimediafoundation.org/

我想要一个这样的正则表达式:

https://\1wikimediafoundation.org/

我的问题是我不知道该怎么做(将$ 转换为\


此代码不起作用:

'https://$1wikimediafoundation.org/'.replace('$', '\')

产生以下错误:

SyntaxError: EOL while scanning string literal

此代码可以正常工作:

'https://$1wikimediafoundation.org/'.replace('$', '\\')

但生成错误的输出:

'https://\\1wikimediafoundation.org/'

【问题讨论】:

  • 您的替换是正确的,您可能对显示结果的方式感到困惑。用print 打印出来,你只会看到一个反斜杠。

标签: javascript python regex


【解决方案1】:

其实可以的:

>>> 'https://$1wikimediafoundation.org/'.replace('$', '\\')
'https://\\1wikimediafoundation.org/'
>>> print 'https://$1wikimediafoundation.org/'.replace('$', '\\')
https://\1wikimediafoundation.org/

当您执行'https://$1wikimediafoundation.org/'.replace('$', '\\') 时,它会返回字符串的__repr__ (~representation),您可以看到特殊字符。

通过打印,您使用的是可读版本__str__。 (参见this answer __str__ vs __repr__

【讨论】:

  • 我的问题是我会更改字符串的表示形式,而不是可读版本,因为我会在下一步中将此字符串解析为正则表达式。
【解决方案2】:

试试这个:

'https://$1wikimediafoundation.org/'.replace('$', r'\')

添加r"\" 会自动转义您尝试执行的backslash

【讨论】:

    【解决方案3】:

    你在这里测试你的正则表达式https://regex101.com/,然后把它改成python。 另外,要替换匹配的组,您可以在这些行上使用re.sub 模块:

    re.sub(r"'([^']*)'", r'{\1}', col ) ) 替换

    'Protein_Expectation_Value_Log(e)', 'Protein_Intensity_Log(I)'

    {Protein_Expectation_Value_Log(e)}, {Protein_Intensity_Log(I)}

    更多可以参考here

    【讨论】:

      【解决方案4】:

      注意$0 应转换为\g<0>,因为\0 在python 正则表达式中是\0x00 字符

      【讨论】:

        猜你喜欢
        • 2017-12-29
        • 1970-01-01
        • 1970-01-01
        • 2017-12-15
        • 1970-01-01
        • 2023-03-14
        • 1970-01-01
        • 1970-01-01
        • 2011-10-02
        相关资源
        最近更新 更多