我正在嘗試找到用 python 中的字符替換特定模式的最佳方法。
例如,如果我有文本“prop1”:“val1”,“prop2”:“val2”“abcdefg”:“hijklmn”“1234”:“5678”
但我想要字串:“prop1”:“val1”,“prop2”:“val2”,“abcdefg”:“hijklmn”,“1234”:“5678”
我發現這種模式似乎從 regex101 正確地對引號集之間的空間進行分組
'"\S*"(\s{1})"\S*"'

但是當在 python 中使用它時,這似乎不是替換組,而是替換整個匹配或其他一些變體行為。
代碼:
testStr = 'prop1": "val1","prop2": "val2" "abcdefg": "hijklmn" "1234": "5678'
testMatch = re.search('"\S*"(\s{1})"\S*"', testStr)
print(f'Full match: {testMatch.group(0)}')
testGroupMatch = testMatch.group(1)
print(f'Group match: {testGroupMatch}')
print(f'Test string before replace: {testStr}')
testStrReplaced = re.sub('"\S*"(\s{1})"\S*"', ',', testStr)
print(f'Test string after replace: {testStrReplaced}')
輸出:
Full match: "val2" "abcdefg"
Group match:
Test string before replace: prop1": "val1","prop2": "val2" "abcdefg": "hijklmn" "1234": "5678"
Test string after replace: prop1": "val1","prop2": ,: ,: "5678"
有誰知道這是否是這種情況的正確方法?如果是這樣,正則運算式看起來是否正確以針對我要替換的模式?
有誰知道我將如何替換匹配組?我發現的大多數示例都提到了反向參考組,但是,這似乎是如果我想用我已經匹配的組替換某些東西。在這種情況下,我只想用單個字符(例如逗號)替換匹配的組,從我的測驗輸出中它只是空格。
謝謝!
uj5u.com熱心網友回復:
試試這個正則運算式:
("[^"] "\s*:\s*"[^"] ")\s
用第 1 組的內容替換每個匹配項,后跟一個,ie,\1,
點擊演示
代碼
解釋:
("[^"] "\s*:\s*"[^"] ")- 匹配格式子串"key":"value"并將其捕獲在第 1 組中"[^"] "- 匹配 a"后跟 1 次或多次出現的任何非 a"后跟結尾的字符"\s*- 匹配 0 或出現的空格:- 匹配一個:\s*- 匹配 0 或出現的空格"[^"] "- 匹配 a"后跟 1 次或多次出現的任何非 a"后跟結尾的字符"
\s- 匹配迄今為止匹配的任何內容之后的空格。這個空白最終將被替換為,
uj5u.com熱心網友回復:
因此,您想要的是找到鍵和值(以 的形式"...": "..."),如果沒有逗號,則在其后添加一個逗號(最后一個鍵和值組除外)。
你可以(".*?"\s*:\s*".*?")\s*,?(?!$)用\1,
這個想法是找出"key": "value"后跟可選逗號的模式,并替換為"key": "value",
演示:https : //regex101.com/r/OX6HH0/1
(".*?"\s*:\s*".*?")\s*,?(?!$)
( start of group 1
" double quote
.*? reluctant match of any number of any char
(i.e. match as least char as
possible)
" double quote
\s* any number of space
: colon
\s* any number of space
".*?" similar to key part: double quote, followed
by reluctant match of any char, followed
by double quote
) end of group 1
\s*,? followed by any space, with optional comma
(?!$) negative lookahead: not followed by end of
line (i.e. do not match if it is the last
key-and-value)
并將上面的匹配替換為 group1,后跟逗號
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/405585.html
標籤:
上一篇:正則運算式:從兩個模式中提取字符
