簡體   English   中英

需要用正則表達式來替換所有用字母或數字包圍的符號

[英]Need regex to replace all symbols surround by a letters or numbers only

我需要一個正則表達式來僅用字母或數字替換所有符號。 留一個空格,我將使用C#運行表達式,我可以將部分卡在regex部分上。

所以更換后如下

  1. 類型01將是類型01
  2. 01 )*仍為01 )*
  3. -類別:玩具仍然是- 類別:玩具
  4. 白色:背面白色黑色

當前表達

(?<=\w)[^a-zA-Z0-9Category:]+(?=\w)

輸入字符串為

-類別:玩具AND(泰迪熊Type-01 *)或(泰迪熊白色:黑色)

所需輸出

-類別:玩具AND(泰迪熊類型01 *)或(泰迪熊白色黑色)

但是我得到的是

-類別:玩具和泰迪熊類型01或泰迪熊白色:黑色)

不知道我是否只是在錯過一些簡單的事情或只是錯誤地堅持了下來

您不能將單詞放入字符類。 那里的所有字符都將添加到該類中,順序無關緊要。

我不確定這是否對您足夠,但是對於您的示例,這將起作用:

(?<=\w)[^a-zA-Z0-9*:()\s]+(?=\w)

並替換為一個空格。

我也會使它更具有Unicode樣式:

(?<=\w)[^\p{L}0-9*:()\s]+(?=\w)

其中\\p{L}是任何語言字母的Unicode屬性。

在Regexr上查看

更新:

如果要保留冒號(如果有“類別”),則可以這樣操作

(?<=\w)(?:[^a-zA-Z0-9*()\s:]+|(?<!Category):)(?=\w)

在Regexr上查看

我在否定的字符類中添加了冒號,以表示不要替換冒號。 然后,我添加了另一種說法:替換冒號,但前提是之前沒有“ Category”。

對於C#,可以使用Regex.Replace函數。

string a = "Category:Toys AND (Teddy Bear Type-01*) OR (Teddy Bear White/Black)";
string s = string.Empty;
s = Regex.Replace(a, @"[^()*:A-Za-z0-9]", " ");

暫無
暫無

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

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