簡體   English   中英

多次匹配兩個正則表達式模式

[英]Match two regex patterns multiple times

我有這個字符串“Energy (kWh/m²)”,我想得到“Energy__KWh_m__”,意思是用下划線替換所有非單詞字符和下標/上標字符。

我有用於替換非單詞字符的正則表達式 -> re.sub("[\W]", "_", column_name)和用於替換上標數字的正則表達式 -> re.sub("[²³¹⁰ⁱ⁴⁵⁶⁷⁸⁹⁺⁻⁼⁽⁾ⁿ]", "", column_name)

我曾嘗試將其組合成一個正則表達式,但我沒有運氣。 每次我嘗試時,我只會得到部分替換,例如“Energy (KWh_m__”) - 使用正則表達式([²³¹⁰ⁱ⁴⁵⁶7⁷⁸⁹⁺⁻⁼⁽⁾ⁿ]).*(\W)

有什么幫助嗎? 謝謝!

要組合兩個正則表達式,您可以使用| 符號,意思是"or" 以下是如何使用它的示例:

import re

column_name = "Energy (kWh/m²)"

pattern = re.compile(r"[\W]|[²³¹⁰ⁱ⁴⁵⁶⁷⁸⁹⁺⁻⁼⁽⁾ⁿ]")
result = pattern.sub("_", column_name)

print(result)

選擇:

result = re.sub(r"[\W]|[²³¹⁰ⁱ⁴⁵⁶⁷⁸⁹⁺⁻⁼⁽⁾ⁿ]", "_", column_name)

輸出:

Energy__kWh_m__

根據您當前的代碼,如果您打算刪除上標字符並用下划線替換所有其他非單詞字符,您可以使用

re.sub(r'([²³¹⁰ⁱ⁴⁵⁶⁷⁸⁹⁺⁻⁼⁽⁾ⁿ])|\W', lambda x: '' if x.group(1) else '_', text)

如果您打算匹配所有非單詞字符和您擁有的字符類中的字符,只需將兩者合並:

re.sub(r'[\W²³¹⁰ⁱ⁴⁵⁶⁷⁸⁹⁺⁻⁼⁽⁾ⁿ]', '_', text)

請參閱第二個正則表達式演示 請注意, \W與符號匹配,因此您甚至可以將其縮短為r'[\W²³¹⁰ⁱ⁴⁵⁶⁷⁸⁹ⁿ]'

請參閱Python 演示

import re
text="Energy (kWh/m²)"
print(re.sub(r'([²³¹⁰ⁱ⁴⁵⁶⁷⁸⁹⁺⁻⁼⁽⁾ⁿ])|\W', lambda x: '' if x.group(1) else '_', text)) # => Energy__kWh_m_
print(re.sub(r'[\W²³¹⁰ⁱ⁴⁵⁶⁷⁸⁹⁺⁻⁼⁽⁾ⁿ]', '_', text)) # => Energy__kWh_m__

暫無
暫無

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

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