[英]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.