簡體   English   中英

Java,正則表達式,去除不需要的字符[后跟,前導,之間]

[英]Java, Regex, strip unwanted characters [trailing, leading, between]

我需要一個正則表達式幫助,以從字符串中剝離不需要的字符(在Java中)。 我通過互相跟隨4個正則表達式解決了這個問題。 替換將被多次調用(偷看:50次以上/秒),並降低性能。 但我認為使用單個表達式肯定有可能,因此性能會有所提高。

TestString是

"   ! ... my-Cruc i@l_\\/Disp lay.Na#m3 ?;()!    "

我喜歡用正則表達式執行的任務

  • 刪除所有主要的非字母字符– [字符串的開頭]
  • 刪除所有結尾的非字母數字字符– [字符串結尾]
  • 刪除之間的所有非字母數字字符([_-。]除外)

因此結果將是

my-Cruil_Display.Nam3

問題是如何在內置模式Alnum和alpha之間進行切換,具體取決於字符串中的位置(開頭,結尾)以及它們之間的異常字符[_-。]。

在過去的幾天里,我嘗試了很多次,但是我沒有使它起作用。 刪除前導非字母字符與正則表達式一起使用

^([^\\p{Alpha}]+)?

但是,如果我附加“之間”,它將不再起作用

使用正則表達式刪除尾隨的非alpha字符

([^\\p{Alnum}]+$) 

正在工作,但不能與所有其他正則表達式結合使用

最后的嘗試之一是

(^[^\\p{Alpha}]+)?[^\\p{Alnum}\\._-]+([^\\p{Alnum}]+$)

誰能幫忙

您可以使用

^\P{Alpha}+|\P{Alnum}+$|[^\p{Alnum}_.-]

Java的:

s = s.replaceAll("^\\P{Alpha}+|\\P{Alnum}+$|[^\\p{Alnum}_.-]", "");

或者,要使其能夠識別Unicode,請添加(?U)標志:

s = s.replaceAll("(?U)^\\P{Alpha}+|\\P{Alnum}+$|[^\\p{Alnum}_.-]", "");

細節

  • ^\\P{Alpha}+ -字符串開頭的字母字符以外的1個或多個字符
  • | - 要么
  • \\P{Alnum}+$ -字符串末尾除字母數字字符外的任何1個或多個字符
  • | - 要么
  • [^\\p{Alnum}_.-] -除字母數字_之外的任何字符. -字符串中任何地方的字符

參見regex演示

暫無
暫無

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

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