簡體   English   中英

僅當不在單詞內時才從字符串中刪除特殊字符

[英]Remove special character from string only if is not inside word

我想替換字符串中的所有特殊字符,但前提是不在單詞中。

特殊字符: <>{}\"/|;:.,~??@#$%^=&*'

例子:

String str = "//won't won't wo/'n't wont wont'."
str.replaceAll(,"") // "won't won't won't wont wont"

任何人都知道如何通過正則表達式實現這一點?

這個正則表達式:

(?<?\w)\W+|\W+(?!\w)

匹配兩個備用正則表達式中的任何一個。 (1|2)

  1. 任何前面沒有單詞字符 ( \w ) 的特殊字符(非單詞字符: \W
  2. 后面沒有單詞字符的任何特殊字符。

這是有效的,因為如果任何一個匹配,則特殊字符不能在一個單詞中

“先於”:積極的向后看。 (?<=y)X : X 前面有 y
“不在前面”:否定的向后看。 (?<!y)X : X 前面沒有 y
“后跟”:正向前瞻。 X(?=y) : X 后跟 y
“后面不跟”:負前瞻。 X(?!y) : X 后面沒有 y。

您應該將\W替換為您的一組特殊字符(適當轉義)

這個解決方案需要注意的一點是它不依賴於空白的存在。

嘗試這個:

(?<![a-z])[<>{}"\/|;:.,~!?@#$%^=&*']|[<>{}"\/|;:.,~!?@#$%^=&*'](?![a-z])

設置了不區分大小寫的標志 ( /i )

演示

Java 的正則表達式引擎執行以下操作。

(?<![a-z])                  # match a letter in a
                            # negative lookbehind
[<>{}"\/|;:.,~!?@#$%^=&*']  # match a special character
|
[<>{}"\/|;:.,~!?@#$%^=&*']  # match a special character
(?![a-z])                   # match a letter in a
                            # negative lookahead

暫無
暫無

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

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