【R語言】R 語言中 gsub 與正則表達式詳解(含 POSIX 與 Perl 風格實例)

R 語言中 gsub 與正則表達式詳解(含 POSIX 與 Perl 風格實例)

在 R 語言中,字符串處理是非常常見的需求,R 語言中的 gsub() 函數則具有字符串替換的功能。本文將通過兩個實例,幫助你深入理解 R 的 gsub()、POSIX 字符類、Perl 風格正則、以及一些常見的坑點與進階技巧。

文章目錄

  • R 語言中 `gsub` 與正則表達式詳解(含 POSIX 與 Perl 風格實例)
    • 1 基礎實例:POSIX 字符類
      • 1.1 `gsub()` 函數的語法規則
      • 1.2 模式 `"[[:alpha:]]+"`
      • 1.3 替換串 `"$"`
      • 1.4 匹配過程
    • 2 Perl 風格實例:`\\b\\w+\\b`
      • 2.1 `perl = TRUE`
      • 2.2 模式 `\\b\\w+\\b`
      • 2.3 替換串 `"$"`
      • 2.4 匹配過程
    • 3 常見坑與進階
      • 3.1 標點與連字符
      • 3.2 數字與下劃線
      • 3.3 Unicode 與多語言
      • 3.4 只替換首個或限定長度
    • 4 總結

1 基礎實例:POSIX 字符類

來看第一個例子:

gsub("[[:alpha:]]+", "$", "Two words")
# [1] "$ $"

1.1 gsub() 函數的語法規則

  • 語法:gsub(pattern, replacement, x, ...)
  • 作用:將字符串 x所有(global)匹配 pattern 的部分替換為 replacement
    對應的 sub() 只會替換第一個匹配。

1.2 模式 "[[:alpha:]]+"

  • [[:alpha:]]:POSIX 命名字符類,表示“字母字符”,等價于 A–Z / a–z(并受 locale/編碼影響)。
  • 外層方括號 [...]:字符類,匹配其中任意一個字符。
  • +:量詞,表示“前面的模式重復一次或多次”。
  • 綜合上述兩點:[[:alpha:]]+ 匹配“一串連續字母”。

1.3 替換串 "$"

  • replacement 里,$ 是字面量,不會觸發正則引用。
  • 注意,在 R 的分組回溯引用用的是 \\1\\2…,不是 $1

1.4 匹配過程

"Two words" 中:

  • Two → 匹配 → 替換為 $
  • 空格保留
  • words → 匹配 → 替換為 $
    結果:"$ $"

2 Perl 風格實例:\\b\\w+\\b

再看一個更靈活的例子,使用 Perl 風格正則:

gsub("\\b\\w+\\b", "$", "Two words", perl = TRUE)
# [1] "$ $"

2.1 perl = TRUE

  • 啟用 PCRE(Perl-Compatible Regular Expressions)引擎。
  • 支持 \\b\\w、前后查看等高級語法。

2.2 模式 \\b\\w+\\b

注意:在 R 字符串中反斜杠需要轉義,所以正則 \b 要寫成 \\b

  • \\b:單詞邊界(word boundary),匹配位置,不消耗字符。
  • \\w:單詞字符,等價于 [A-Za-z0-9_]
  • +:匹配一個或多個單詞字符。
  • 綜合:匹配“完整單詞”,即兩側是邊界的 \\w+

2.3 替換串 "$"

  • 同樣是字面量 $

  • 若要保留原文,需要捕獲組:

    gsub("(\\b\\w+\\b)", "<\\1>", "Two words", perl=TRUE)
    # "<Two> <words>"
    

2.4 匹配過程

"Two words"

  • 起始處 → 邊界 → Two 匹配 → $
  • 空格保留
  • words 匹配 → $
    結果:"$ $"

其實前面所舉的兩個例子稍加改編后可以用來統計一段文本的單詞數,請讀者思考如何編寫 R 語言代碼可以實現這個功能?🤔
歡迎讀者在評論區分享你的代碼!


3 常見坑與進階

3.1 標點與連字符

  • \\w 不包含連字符 -、撇號 '

    gsub("\\b\\w+\\b", "$", "don't well-known", perl=TRUE)
    # "$ $" (don 和 t;well 和 known)
    
  • 想把它們算作詞的一部分:

    gsub("\\b[\\w'-]+\\b", "$", "don't well-known", perl=TRUE)
    

3.2 數字與下劃線

  • \\w 包含數字與 _。若只想匹配純字母詞:

    gsub("\\p{L}+", "$", "C3PO and über", perl=TRUE)
    

3.3 Unicode 與多語言

  • 默認 \\w 偏向 ASCII,不適合中文/重音字母。

  • 更穩的方法是使用 Unicode 屬性:

    gsub("\\p{L}+", "$", "über fa?ade 中 文", perl=TRUE)
    
  • 或用 (*UCP) 提示 PCRE 按 Unicode 分類:

    gsub("(*UCP)\\b[\\p{L}\\p{N}_]+\\b", "$", "über fa?ade 中文", perl=TRUE)
    

3.4 只替換首個或限定長度

  • 替換首個詞:

    sub("\\b\\w+\\b", "$", "Two words", perl=TRUE)
    
  • 替換長度 ≥4 的詞:

    gsub("\\b(?=\\w{4,}\\b)\\w+\\b", "$", "a few longerwords", perl=TRUE)
    

4 總結

  • gsub() = 全局替換,sub() = 只進行首次替換。
  • POSIX 字符類(如 [[:alpha:]])適合基礎 ASCII 場景。
  • perl=TRUE 開啟 PCRE,引入 \\b\\w、前后查看等高級特性。
  • 替換串中 $ 是普通字符;回溯引用用 \\1
  • 多語言/特殊符號場景下,建議使用 \\p{...}(*UCP)

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/95703.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/95703.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/95703.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

EN55035多媒體設備電磁兼容性抗干擾要求標準

EN55035 是一項由歐洲標準化委員會制定的電磁兼容性&#xff08;EMC&#xff09;標準&#xff0c;全稱為《多媒體設備的電磁兼容性要求》。該標準主要針對多媒體設備的電磁輻射和抗干擾能力進行規范&#xff0c;確保這類設備在電磁環境中能夠正常工作&#xff0c;同時不對其他設…

計算分組內時間列的最大差值

計算分組內時間列的最大差值 在 Pandas 中&#xff0c;要計算每個分組內 time 列的最大值與當前行值的差值&#xff0c;需結合 groupby() 和 transform() 方法。核心步驟如下&#xff1a;分組計算最大值 使用 transform(max) 獲取每個分組中 time 列的最大值&#xff0c;結果會…

CUDA 編程筆記:CUDA延遲隱藏

一、核心概念&#xff1a;延遲隱藏&#xff08;Latency Hiding&#xff09;是 GPU 通過多線程機制掩蓋指令延遲的關鍵技術。當某些線程束&#xff08;warp&#xff09;因指令延遲&#xff08;如內存訪問或算術計算&#xff09;而等待時&#xff0c;其他就緒線程束會立即被調度執…

MySQL工具包中的其他程序

雖然有很多不同的程序&#xff0c;但有些選項是公共的&#xff0c;比兔用戶名和密碼&#xff0c;使用方法和MySQL相同&#xff0c;在這里統一列出&#xff0c;后面我們介紹不同的工具時&#xff0c;只討論個性的選項以及作用以下是常用的MySQL程序&#xff1a;程序名作用mysqld…

C#WPF實戰出真汁09--【消費開單】--選擇菜品

1、功能介紹當選擇一個空桌時&#xff0c;必須先開臺才能開單&#xff0c;可以先開臺&#xff0c;再開單&#xff0c;也可以開臺的同時開單當選擇一個用餐中的餐桌時&#xff0c;必須顯示該桌前面已經點好的菜品&#xff0c;同時可以繼續點餐或結賬所以無論哪個功能都涉及選擇菜…

大廠語音合成成本深度對比:微軟 / 阿里 / 騰訊 / 火山 API 計費拆解與技術選型指南

在 AI 配音、智能客服、教育音頻等場景爆發的當下&#xff0c;語音合成 API 已成為企業技術棧中的核心組件。然而&#xff0c;不同云廠商的計費規則差異顯著&#xff0c;短文本 / 長文本計費分離、預付費 / 后付費價格梯度懸殊、音色授權費暗藏成本陷阱等問題&#xff0c;常導致…

Flutter開發 網絡請求

HttpClient&#xff08;dart自有&#xff09; 1.get 點擊請求按鈕獲取數據&#xff0c;解析數據獲取單詞展示到屏幕上。class MyState extends State {String info "暫無數據";List<Widget> texts [];overridevoid initState() {super.initState();}override…

vscode中用python調用matlab的函數(環境安裝)

本實踐適用于WIN11-x64和ubuntu22.04-x64系統&#xff0c;其余系統和架構未驗證。 效果展示 1.環境要求 MATLAB Engine API for Python 的系統要求&#xff1a;參閱此官方文檔MATLAB 與 Python 的版本兼容性&#xff1a;參閱此官方文檔 2.安裝步驟 安裝Vscode&#xff08;不…

【數據分享】大清河(大慶河)流域上游土地利用

而今天要說明數據就是大清河&#xff08;大慶河&#xff09;流域上游土地利用。數據介紹大清河&#xff0c;又稱大慶河&#xff0c;作為海河流域的重要支流&#xff0c;其流域上游地區不僅是區域水資源調控的關鍵節點&#xff0c;更是生態保護與經濟發展的重要載體。以下從地理…

圖論——Djikstra最短路

原理解釋 首先解釋一下它大概的應用場景以及原理&#xff1a;現在有這么一張圖&#xff0c;圖上各點之間都有一定的邊權或者說是距離。給定你一個起點&#xff08;例如點1&#xff09;&#xff0c;讓你求這個點到圖上所有點的最短距離是多少&#xff1f; 這個問題比較平常&…

kafka初步介紹

Kafka角色介紹TopicTopic主題的意思&#xff0c;消費者必須指定主題用于的消息發送&#xff0c;生產者也必須指定主題用于消息的接收。topic只是邏輯上的劃分。partitionpartition是分區的意思&#xff0c;他的主要作用是將發送到一個topic的數據做一個劃分。如果有4個partitio…

windows10的vs2019編譯openssl靜態庫備忘

1、下載安裝openssl源碼2、官網下載安裝activeperl或Strawberry Perl。官網下載慢&#xff0c;網盤找找。使用中activeperl有些異常提示、缺模塊&#xff0c;最后使用了Strawberry Perl。3、安裝nasm。powershell使用choco install nasm -y 即可。powershell使用cd命令打開當前…

學習筆記與效率提升指南:編程、記憶與面試備考

在學習與工作中&#xff0c;高效的記錄習慣、針對性的記憶方法和實用的技能儲備&#xff0c;是提升效率的關鍵。本文結合編程學習、面試備考和英語單詞積累&#xff0c;整理一套可落地的學習思路&#xff0c;尤其適合編程初學者。 一、學習核心原則&#xff1a;高效優先&#x…

順豐面試題

1. 你擅長處理哪類問題推薦回答&#xff1a; "我比較擅長處理以下幾類前端問題&#xff1a;性能優化&#xff1a;包括加載優化&#xff08;代碼分割、懶加載&#xff09;、運行時優化&#xff08;減少重排重繪&#xff09;等復雜組件開發&#xff1a;如表單聯動、可視化圖…

Warmup_steps 設置經驗

文章目錄什么是 Warmup&#xff1f;實現示例科學設置 Warmup 的黃金法則直觀例子什么是 Warmup&#xff1f; Warmup 是一種學習率調度策略&#xff0c;在訓練初期逐步增加學習率&#xff08;LR&#xff09;&#xff0c;而不是直接使用目標學習率。它解決了兩個關鍵問題&#x…

vue一個超簡單的菜單欄伸縮示例

代碼<template><div class"container"><!-- 左側區域 --><div class"left-side" :style"{ width: leftWidth px }">左側內容</div><!-- 右側區域 --><div class"right-side" :style"{ l…

Spark學習(Pyspark)

&#xff08;1&#xff09;Spark基礎入門 ①什么是Spark Spark是一款分布式內存計算的統一分析引擎。其特點就是對任意類型的數據進行自定義計算。Spark可以計算&#xff1a;結構化、半結構化、非結構化等各種類型的數據結構&#xff0c;同時也支持使用Python、Java、Scala、R以…

PDF壓縮原理詳解:如何在不失真的前提下減小文件體積?

與直接刪除內容不同&#xff0c;良好的PDF壓縮能在大幅減小體積的同時&#xff0c;較好地保留原有文字清晰度和圖像質量&#xff0c;兼顧實用性與視覺效果。軟件操作十分直觀&#xff0c;僅需設置輸入文件與輸出路徑&#xff0c;點擊【開始壓縮】按鈕即可啟動處理。畫質壓縮等級…

從應用場景看國產化FPGA潛力,紫光同創研討會武漢·北京站回顧

八月&#xff0c;紫光同創 FPGA 技術研討會先后在武漢、北京舉行。作為紫光同創官方合作伙伴&#xff0c;ALINX 攜紫光同創 FPGA 開發板及行業解決方案亮相&#xff0c;與來自通信、工業控制、醫療、圖像視頻、消費電子等領域的近 200 位行業專家齊聚一堂&#xff0c;通過主題演…

安卓APK包體優化全攻略

目錄 正常默認打包流程&#xff08;以Android平臺為例&#xff09; 查看編輯器打包日志 壓縮圖片 壓縮網格模型 壓縮貼圖 壓縮音頻文件 只打64位包 最終大小 正常默認打包流程&#xff08;以Android平臺為例&#xff09; 準備工作&#xff1a; 確保已安裝最新版Unity H…