[英]Replace all occurrences of 'pattern' in part of a string using Python regex
[英]Regex Replace All But Pattern
這可能是重復的,但我試圖替換除某個字符串模式之外的所有內容。 以下是字符串示例:
'dkas;6-17'
'dsajdl 10'
'dsjalkdj16-20'
這里的目標是用任何東西替換任何不是數字的東西。 所以我從上面的字符串中得到的是:
'6-17'
''
'16-20'
第二個字符串不會產生任何結果,因為它與模式不匹配。 我知道匹配我的模式的正則表達式,但我對如何使用 regexp_replace 匹配除該模式之外的所有內容感到困惑。 以下是我所擁有的,但這取代了我想要實際保留的模式。
re.sub('[0-9]{1,2}\-[0-9]{1,2}', '', text)
如果您的意思是第二個不會產生任何結果,您可以匹配除數字或換行符之外的任何字符,然后捕獲組中的模式。
如果 sub 應該留下一個空字符串,您可以使用交替匹配整行。
[^\d\r\n]+(\d{1,2}-\d{1,2})|.+
在零件
[^\d\r\n]+
匹配除數字或換行符以外的任何字符 1+ 次(\d{1,2}-\d{1,2})
捕獲組 1 ,匹配 1-2 位, -
和 1-2 位|
或者.+
匹配除換行符以外的任何字符 1 次以上示例代碼
import re
lines = [
'dkas;6-17',
'dsajdl 10',
'dsjalkdj16-20'
]
for text in lines:
print(re.sub('[^\d\r\n]+(\d{1,2}-\d{1,2})|.+', r'\1', text))
Output
6-17
16-20
只查找字符串中的所有匹配項並將它們連接在一起怎么樣?
>>> ''.join(re.findall('[0-9]{1,2}\-[0-9]{1,2}', 'dkas;6-17abc19-10'))
'6-1719-10'
>>> ''.join(re.findall('[0-9]{1,2}\-[0-9]{1,2}', 'dsajdl 10'))
''
考慮匹配
\d+-\d+|$
如果字符串是
dkas;6-17
第一個匹配是6-17
,第二個是行尾的空字符串。
如果字符串是
dsjalkdj16-20kl21-33mn
將有三場比賽, 16-20
, 21-33
和行尾的空白區域。
如果字符串是
dsajdl 10
第一個(也是唯一的)匹配將是行尾的空字符串。
因此,如果有一個匹配項,它將是字符串末尾的空字符串,該字符串將被返回; 否則,根據要求返回第一個或除最后一個之外的所有匹配項。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.