簡體   English   中英

在 Python 中使用 RegEx 替換除一種特定模式之外的所有非字母數字字符

[英]Replace all Non-Alphanumeric Characters except one particular pattern using RegEx in Python

假設,我有一些像

text = "xyz - aabc 123.56 癌症 s15.2 日期 12/03/2021 @ dd 醫院 www.someurl ocr.5rror 123.sometext"

現在,我想創建一個正則表達式,它將用空格替換任何非字母數字字符,除了被數字包圍的點(.),最終文本應該是這樣的

“xyz aabc 123.56 癌症 s15.2 日期 12 03 2021 dd 醫院 www someurl ocr 5rror 123 sometext”

我有這個正則表達式可以找到這些匹配項re.findall(r"(\\b[a-z0-9] \\d.\\d[a-z0-9] \\b)", text)給我['123.56' , 's15.2'] ,但我無法獲得上述文本。

提前致謝。

您可以使用 re.sub 和帶有捕獲組的模式

(\d+(?:\.\d+))|\W+

模式匹配:

  • (\\d+(?:\\.\\d+))捕獲帶有可選小數部分和組 1 中的點的數字
  • | 要么
  • \\W+匹配 1+ 個非單詞字符以替換為單個空格(或使用否定字符類[^a-zA-Z0-9]+保持匹配下划線)

在替換中保留捕獲組,並將 1+ 非單詞字符的匹配替換為空格。

查看正則表達式演示Python 演示

import re

s = "xyz - aabc 123.56 cancer s15.2 date 12/03/2021 @ dd hospital www.someurl ocr.5rror 123.sometext"
pattern = r"(\d+(?:\.\d+))|\W+"
print(re.sub(pattern, lambda x: x.group(1) if x.group(1) else " ", s))

輸出

xyz aabc 123.56 cancer s15.2 date 12 03 2021 dd hospital www someurl ocr 5rror 123 sometext

暫無
暫無

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

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