【问题标题】:Substituion of variable pattern with RegEx in Python在 Python 中用 RegEx 替换变量模式
【发布时间】:2015-09-17 13:47:15
【问题描述】:

我正在寻找 Python 中非常特殊的 RegEx(或其他解决方案,性能接近)来替代模式,这些模式在以下示例中:

...-1AG.,., should be transformed as ...G.,.,
..,-1A,.,., should be transformed as ..,,.,.,
...-2GTC,., should be transformed as ...C,.,
..,-2GT.,., should be transformed as ..,.,.,
...+3TAGT,, should be transformed as ...T,,
..,+3TAG.,. should be transformed as ..,.,.

基本上:

AnySymbol(不仅是点和逗号),后跟一个 +/- 符号,后跟一个字母数字 (1..9),后跟几个字母,其数量取决于前一个数字,最后是 AnySymbol (不仅是点和逗号),

应该转化为:

AnySymbol(不仅是点和逗号)和 AnySymbol(不仅是点和逗号)。

显然解决方案:String = re.sub(r'[\-\+]\d\w+', "", String) 不正确,如果我们有案例(...-1AG.,., should be transformed as ...G.,.,)。 到目前为止,我正在遍历r'[\-\+]1\w', r'[\-\+]2\w\w', r'[\-\+]3\w\w\w' ... r'[\-\+]9\w\w\w\w\w\w\w\w\w',但是我希望有更优雅的解决方案。有什么想法吗?

【问题讨论】:

    标签: python regex


    【解决方案1】:

    看看这个工作演示。

    x="""...-1AG.,., should be transformed as ...G.,.,
    ..,-1A,.,., should be transformed as ..,,.,.,
    ...-2GTC,., should be transformed as ...C,.,
    ..,-2GT.,., should be transformed as ..,.,.,
    ...+3TAGT,, should be transformed as ...T,,
    ..,+3TAG.,. should be transformed as ..,.,."""
    
    def repl(matchobj):
        return matchobj.group(2)[int(matchobj.group(1)):]
    
    print re.sub(r"[+-](\d+)([a-zA-Z]+)",repl,x)
    

    您可以在re.sub 中使用自己的函数来替换customized

    【讨论】:

    • 这个解决方案相当优雅,我会尽快根据循环对其进行基准测试,但有些事情告诉我它会表现得更好。感谢您的宝贵意见。
    猜你喜欢
    • 1970-01-01
    • 2012-03-05
    • 1970-01-01
    • 2020-05-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-02
    相关资源
    最近更新 更多