最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python正則表達(dá)式匹配和替換的操作指南

 更新時(shí)間:2025年09月08日 08:58:40   作者:UrbanJazzerati  
正則表達(dá)式是處理文本的強(qiáng)大工具,Python通過re模塊提供了完整的正則表達(dá)式功能,本文將通過代碼示例詳細(xì)介紹Python中的正則匹配和替換操作,需要的朋友可以參考下

基礎(chǔ)語法

導(dǎo)入re模塊

import re

基本元字符

  • . - 匹配任意字符(除了換行符)
  • \d - 匹配數(shù)字
  • \w - 匹配字母、數(shù)字、下劃線
  • \s - 匹配空白字符
  • [] - 字符集
  • * - 0次或多次
  • + - 1次或多次
  • ? - 0次或1次
  • {n} - 恰好n次
  • {n,} - 至少n次
  • {n,m} - n到m次

常用匹配方法

1. re.match() - 從字符串開頭匹配

text = "Hello World 2024"
result = re.match(r"Hello", text)
if result:
    print("匹配成功:", result.group())  # 輸出: Hello

2. re.search() - 搜索整個(gè)字符串

text = "The year is 2024"
result = re.search(r"\d{4}", text)
if result:
    print("找到數(shù)字:", result.group())  # 輸出: 2024

3. re.findall() - 查找所有匹配項(xiàng)

text = "蘋果10元, 香蕉5元, 橙子8元"
prices = re.findall(r"\d+元", text)
print(prices)  # 輸出: ['10元', '5元', '8元']

4. re.finditer() - 返回迭代器

text = "聯(lián)系: 123-4567, 987-6543"
for match in re.finditer(r"\d{3}-\d{4}", text):
    print(f"找到電話: {match.group()} 位置: {match.span()}")

替換方法詳解

re.sub() 基本用法

text = "今天是2023年12月15日"
# 將年份替換為2024
new_text = re.sub(r"2023", "2024", text)
print(new_text)  # 輸出: 今天是2024年12月15日

使用分組和引用

text = "張三 李四 王五"
# 交換姓和名的位置
new_text = re.sub(r"(\w+) (\w+)", r"\2 \1", text)
print(new_text)  # 輸出: 李四 張三 王五

使用函數(shù)進(jìn)行復(fù)雜替換

def double_number(match):
    number = int(match.group())
    return str(number * 2)
text = "數(shù)字: 5, 10, 15"
new_text = re.sub(r"\d+", double_number, text)
print(new_text)  # 輸出: 數(shù)字: 10, 20, 30

實(shí)際應(yīng)用案例

案例1:格式化電話號碼

def format_phone_number(text):
    # 將各種格式的電話號碼統(tǒng)一為: (xxx) xxx-xxxx
    pattern = r"(\d{3})[-.\s]?(\d{3})[-.\s]?(\d{4})"
    replacement = r"(\1) \2-\3"
    return re.sub(pattern, replacement, text)
phone_text = "聯(lián)系: 123-456-7890, 123.456.7890, 123 456 7890"
formatted = format_phone_number(phone_text)
print(formatted)
# 輸出: 聯(lián)系: (123) 456-7890, (123) 456-7890, (123) 456-7890

案例2:清理HTML標(biāo)簽

def remove_html_tags(text):
    # 移除HTML標(biāo)簽,保留文本內(nèi)容
    return re.sub(r"<[^>]+>", "", text)
html_text = "<h1>標(biāo)題</h1><p>這是一個(gè)<strong>段落</strong></p>"
clean_text = remove_html_tags(html_text)
print(clean_text)  # 輸出: 標(biāo)題這是一個(gè)段落

案例3:數(shù)據(jù)脫敏

def mask_sensitive_data(text):
    # 隱藏身份證號中間部分
    text = re.sub(r"(\d{4})\d{8}(\d{4})", r"\1********\2", text)
    # 隱藏手機(jī)號中間部分
    text = re.sub(r"(\d{3})\d{4}(\d{4})", r"\1****\2", text)
    return text
sensitive_text = "身份證: 510123199001011234, 手機(jī): 13800138000"
masked_text = mask_sensitive_data(sensitive_text)
print(masked_text)
# 輸出: 身份證: 5101********1234, 手機(jī): 138****8000

案例4:Salesforce Flow版本更新

import re
def update_flow_version(rows, flow_name, old_version, new_version):
    """
    更新Salesforce Flow的多語言鍵名版本號
    """
    updated_rows = []
    
    for row in rows:
        if row and len(row) >= 1:
            key = row[0]
            if key and isinstance(key, str):
                patterns = [
                    (f"Flow\.Flow\.{flow_name}\.{old_version}\.", 
                     f"Flow.Flow.{flow_name}.{new_version}."),
                    (f"Flow\.AutoLaunchedFlow\.{flow_name}\.{old_version}\.", 
                     f"Flow.AutoLaunchedFlow.{flow_name}.{new_version}."),
                ]
                
                new_key = key
                for pattern, replacement in patterns:
                    if re.search(pattern, key):
                        new_key = re.sub(pattern, replacement, key)
                        break
                
                # 更新行的第一個(gè)元素
                updated_row = list(row)
                updated_row[0] = new_key
                updated_rows.append(updated_row)
            else:
                updated_rows.append(row)
        else:
            updated_rows.append(row)
    
    return updated_rows
# 使用示例
rows = [
    ["Flow.Flow.CustomerOnboarding.1.title", "客戶入駐流程"],
    ["Flow.AutoLaunchedFlow.CustomerOnboarding.1.description", "自動啟動流程"],
    ["Other.Key", "其他值"]
]
updated = update_flow_version(rows, "CustomerOnboarding", "1", "2")
for row in updated:
    print(row)
# 輸出:
# ['Flow.Flow.CustomerOnboarding.2.title', '客戶入駐流程']
# ['Flow.AutoLaunchedFlow.CustomerOnboarding.2.description', '自動啟動流程']
# ['Other.Key', '其他值']

案例5:日志文件處理

def parse_log_file(log_content):
    """
    解析日志文件,提取時(shí)間戳、級別和消息
    """
    log_pattern = r"(\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}) [(\w+)] (.+)"
    logs = []
    
    for line in log_content.split('\n'):
        match = re.match(log_pattern, line)
        if match:
            timestamp, level, message = match.groups()
            logs.append({
                'timestamp': timestamp,
                'level': level,
                'message': message
            })
    
    return logs
# 示例日志內(nèi)容
log_content = """2024-01-15 10:30:25 [INFO] 用戶登錄成功
2024-01-15 10:31:10 [ERROR] 數(shù)據(jù)庫連接失敗
2024-01-15 10:32:45 [WARNING] 內(nèi)存使用率過高"""
parsed_logs = parse_log_file(log_content)
for log in parsed_logs:
    print(f"{log['timestamp']} - {log['level']}: {log['message']}")

高級技巧

1. 編譯正則表達(dá)式(提高性能)

# 對于需要多次使用的模式,先編譯
phone_pattern = re.compile(r"(\d{3})-(\d{3})-(\d{4})")
texts = ["123-456-7890", "987-654-3210"]
for text in texts:
    match = phone_pattern.search(text)
    if match:
        print(f"完整匹配: {match.group()}, 分組: {match.groups()}")

2. 使用命名分組

text = "日期: 2024-01-15"
pattern = r"(?P<year>\d{4})-(?P<month>\d{2})-(?P<day>\d{2})"
match = re.search(pattern, text)
if match:
    print(f"年: {match.group('year')}, 月: {match.group('month')}, 日: {match.group('day')}")

3. 非貪婪匹配

text = "<div>內(nèi)容1</div><div>內(nèi)容2</div>"
# 貪婪匹配
greedy = re.findall(r"<div>(.*)</div>", text)
print("貪婪匹配:", greedy)  # 輸出: ['內(nèi)容1</div><div>內(nèi)容2']
# 非貪婪匹配
non_greedy = re.findall(r"<div>(.*?)</div>", text)
print("非貪婪匹配:", non_greedy)  # 輸出: ['內(nèi)容1', '內(nèi)容2']

4. 前后查找

text = "價(jià)格: $100, 折扣: $20"
# 查找$后面的數(shù)字
prices = re.findall(r"(?<=$)\d+", text)
print("價(jià)格:", prices)  # 輸出: ['100', '20']

最佳實(shí)踐

  1. 使用原始字符串r"pattern" 避免轉(zhuǎn)義問題
  2. 編譯常用模式:提高性能
  3. 合理使用分組:使代碼更清晰
  4. 處理異常情況:確保匹配失敗時(shí)不會崩潰
  5. 測試正則表達(dá)式:使用在線工具驗(yàn)證模式

總結(jié)

正則表達(dá)式是Python中處理文本的強(qiáng)大工具,re.sub()函數(shù)特別適用于字符串替換任務(wù)。通過掌握基本語法和高級技巧,你可以高效地處理各種文本處理需求,從簡單的字符串替換到復(fù)雜的數(shù)據(jù)提取和格式化。

記?。赫齽t表達(dá)式雖然強(qiáng)大,但也要適度使用,對于簡單的字符串操作,Python內(nèi)置的字符串方法可能更合適。

以上就是Python正則表達(dá)式匹配和替換的操作指南的詳細(xì)內(nèi)容,更多關(guān)于Python正則表達(dá)式匹配和替換的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Python用來做Web開發(fā)的優(yōu)勢有哪些

    Python用來做Web開發(fā)的優(yōu)勢有哪些

    這篇文章主要介紹了Python用來做Web開發(fā)的優(yōu)勢有哪些,文中講解非常細(xì)致,幫助大家更好的理解和學(xué)習(xí)Python,感興趣的朋友可以了解下
    2020-08-08
  • python入門學(xué)習(xí)關(guān)于for else的特殊特性講解

    python入門學(xué)習(xí)關(guān)于for else的特殊特性講解

    本文將介紹 Python 中的" for-else"特性,并通過簡單的示例說明如何正確使用它,有需要的朋友可以借鑒參考下,希望能夠有所幫助
    2021-11-11
  • Python語言異常處理測試過程解析

    Python語言異常處理測試過程解析

    這篇文章主要介紹了Python語言異常處理測試過程解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-01-01
  • 淺析Python中線程以及線程阻塞

    淺析Python中線程以及線程阻塞

    這篇文章主要為大家簡單介紹一下Python中線程以及線程阻塞的相關(guān)知識,文中的示例代碼講解詳細(xì),具有一定的學(xué)習(xí)價(jià)值,感興趣的小伙伴可以了解一下
    2023-04-04
  • Python中創(chuàng)建二維數(shù)組

    Python中創(chuàng)建二維數(shù)組

    今天小編就為大家分享一篇關(guān)于Python中創(chuàng)建二維數(shù)組,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧
    2018-10-10
  • 使用Python的package機(jī)制如何簡化utils包設(shè)計(jì)詳解

    使用Python的package機(jī)制如何簡化utils包設(shè)計(jì)詳解

    這篇文章主要給大家介紹了關(guān)于使用Python的package機(jī)制如何簡化utils包設(shè)計(jì)的相關(guān)資料,文中通過示例代碼的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起看看吧。
    2017-12-12
  • Python 圖像處理之顏色遷移(reinhard VS welsh)

    Python 圖像處理之顏色遷移(reinhard VS welsh)

    這篇文章主要介紹了分別利用reinhard算法和welsh算法實(shí)現(xiàn)圖像的顏色遷移,并對二者算法的效果進(jìn)行了對比,感興趣的小伙伴可以了解一下
    2021-12-12
  • python實(shí)現(xiàn)圖像拼接功能

    python實(shí)現(xiàn)圖像拼接功能

    這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)圖像拼接功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-03-03
  • Python+Tkinter實(shí)現(xiàn)軟件自動更新與提醒

    Python+Tkinter實(shí)現(xiàn)軟件自動更新與提醒

    這篇文章主要為大家詳細(xì)介紹了Python如何利用Tkinter編寫一個(gè)軟件自動更新與提醒小程序,文中的示例代碼簡潔易懂,感興趣的小伙伴可以動手嘗試一下
    2023-07-07
  • Saltstack快速入門簡單匯總

    Saltstack快速入門簡單匯總

    saltstack是使用python編寫的開源自動化部署與管理工具,擁有良好的擴(kuò)展性以及優(yōu)秀的執(zhí)行效率,配置簡單,可以工作在多平臺上,經(jīng)常被描述為 Func加強(qiáng)版+Puppet精簡版
    2016-03-03

最新評論

景宁| 历史| 澜沧| 祥云县| 保山市| 绥滨县| 五家渠市| 缙云县| 马尔康县| 榕江县| 东城区| 加查县| 固原市| 山东| 收藏| 江源县| 乌拉特前旗| 格尔木市| 台中县| 昌图县| 舟曲县| 牟定县| 福泉市| 汕尾市| 朝阳市| 金昌市| 托里县| 宜春市| 阿坝县| 盈江县| 长治市| 仁寿县| 唐海县| 韶关市| 奇台县| 宝应县| 萨嘎县| 睢宁县| 横山县| 安徽省| 三亚市|