簡體   English   中英

Python正則表達式替換

[英]Python regular expressions substitution

我有以下字符串: "n && && && && && &&n" ,我想substitiute &&and ,但只有那些&&這之前和之后他們有一個空格秒。

我正在使用以下代碼:

import re
str = input()
change = re.sub(r' (&&) ', ' and ', str)
print (change)

但是輸出如下: n and && and && and &&n

正確的輸出應為: n and and and and and &&n

有人可以告訴我我要去哪里了嗎?

在表達式中,您希望將空格計數兩次,但是&&后面的空格將使其無法被視為下一個&&之前的空格。 您正在尋找“環顧四周”:

>>> import re
>>> s = 'n && && && && && &&n'
>>> change = re.sub(r'(?<= )(&&)(?= )', 'and', s)
>>> print (change)
n and and and and and &&n

這些“尋找”給定的匹配而不實際消耗它們。 您實際上只對and感興趣; 他們只需要被空間包圍。

另外,不要命名您的變量str否則將很難訪問內置函數str()

麻煩的是,開頭的“ n &&”是由第一個替換匹配項選擇的。 一旦&&之后的空格被刪除(盡管被'和'中的空格所代替),就不能再用於其他匹配中。

好消息是您在子傳遞之后永遠不會以連續的&&結尾,並且-對於最簡單的解決方案-您可以只運行兩次sub:

In [7]: input_str = 'n && && && && && &&n'

In [8]: first_sub = re.sub(r' (&&) ', ' and ', input_str)

In [9]: second_sub = re.sub(r' (&&) ', ' and ', first_sub)

In [10]: print second_sub
n and and and and and &&n

執行一次替換后,您的正則表達式將不會再查看結尾空間,因此檢查的下一個字符將為“ && ...”。 而是“先行”代替一個空格,而不是代替它:

change = re.sub(r' (&&)(?= )',' and',str)

暫無
暫無

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

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