[英]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)
\w
) 的特殊字符(非單詞字符: \W
)這是有效的,因為如果任何一個匹配,則特殊字符不能在一個單詞中
“先於”:積極的向后看。 (?<=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.