簡體   English   中英

像python中的正則表達式一樣替換ACD | BCD

[英]Substitution of ACD|BCD like regular expression in python

A,B,C和D代表正則表達式的不同部分。

我要實現的效果:輸入字符串是ACD或BCD。 用E替換C后,輸出應為AED或BED。

我使用的正則表達式:

r=(A)C(D)|(B)C(D)

但是,當我進行替換時出現了問題。 如果我使用r.sub(r'\\1s0\\2',inputstring)則當輸入為BCD時將出現不匹配組錯誤。 如果我使用r.sub(r'\\3s0\\4',inputstring)則當輸入為ACD時會出現組不匹配錯誤。

那么,如何編輯正則表達式以避免這種情況?

使用(A|B)C(D)代替(A)C(D)|(B)C(D)

import re
r = re.compile(r'(A|B)C(D)')
r.sub(r'\1E\2', 'ACD')    # 'AED'
r.sub(r'\1E\2', 'BCD')    # 'BED'

您可以使用替代函數代替字符串。 該函數的返回值用作替換字符串。

import re

def repl(m):
    # m: the matched object.
    if m.group(1) is not None:
        prefix, suffix = m.group(1), m.group(2)
    else:
        prefix, suffix = m.group(3), m.group(4)
    return '{}E{}'.format(prefix, suffix)

re.sub('(A)C(D)|(B)C(D)', repl, 'ACD') # AED
re.sub('(A)C(D)|(B)C(D)', repl, 'BCD') # BED

另外,如果您使用regex模塊而不是Python內置的re模塊,則可以執行以下操作:

>>> import regex # NOTE: not `re`, but `regex`
>>>
>>> regex.sub('(A)C(D)|(B)C(D)', r'\1\3E\2\4', 'ACD')
'AED'
>>> regex.sub('(A)C(D)|(B)C(D)', r'\1\3E\2\4', 'BCD')
'BED'

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM