簡體   English   中英

如何在python中使用正則表達式修改字符串中的文本?

[英]How to modify a text within string using regular expressions in python?

我正在嘗試更改包含如下字符串的文件:

Record 1 : 
{ "K1":"value1" , 
  "K2":"value2" 
}

Record 2 :
{ "K1":"value3" , 
  "K2":"value4" 
}

{
    "Record_1" : 
        { "K1": "value1", 
          "K2": "value2" 
    }, 

    "Record_2" :
        { "K1": "value3", 
          "K2": "value4" 
        }
}

(以使其成為正確的JSON格式)。
我遇到問題的部分代碼是:

pattern = r"(\s*)Record (\d+):"
all_records_json = re.sub(middle_pattern, "\"Record_"+ ??? + "\" : ",all_records)

而且我不知道要放什么而不是??? 以便它讀取與模式匹配的(\\ d +)部分。

首先,您的模式首先與實際數據不匹配:

>>> all_records = '''Record 2 :
... { "K1":"value3" , 
...   "K2":"value4" 
... }'''
>>> pattern = r"(\s*)Record (\d+):"
>>> re.findall(pattern, all_records)
[]

那是因為您的數據在數字和冒號之間有一個空格。 您需要解決此問題。 當我們討論它時,我不知道為什么要在前面的空格周圍放置一個組,所以我們不要這樣做。 這樣我們得到:

>>> pattern = r"\s*Record (\d+)\s*:"
>>> re.findall(pattern, all_records)
[2]

現在,您唯一的捕獲組是\\d+ 因此,這將是第1組。您可以將其包括在\\1 所以:

>>> print(re.sub(pattern, r'"Record_\1": ', all_records))
"Record_2":
{ "K1":"value3" ,
  "K2":"value4"
}

那仍然不是有效的JSON,但這正是您想要的,對嗎?

如果您閱讀文檔,則re.sub解釋說:“后向引用,例如\\6 ,將替換為模式中第6組匹配的子字符串。” 有關(…)組和(?P<name>…)組的反向引用的完整詳細信息,請在正則表達式語法中查找它們。 您還應該閱讀Regular Expression HOWTO ,它以一種對新手更友好的方式解釋了所有這些內容。

注意,就像模式一樣,我將替換設置為原始字符串,因此我不必轉義\\1 ,並且我也使用單引號而不是雙引號,因此不必轉義"字符。

暫無
暫無

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

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