2010-09-26 85 views
-3

幾個問題:我怎樣才能匹配|的系列與Java正則表達式?

1)如何使基於搜索文字的以下正則表達式^工作爲搜索文字|

搜索文字^基於正則表達式(這工作得很好,這是從這個論壇的寶貴投入一個):

String intermediateResult = in.replaceAll("(TEST\\^[^^]*\\^\\^[^^]*\\^[^^]*\\^)\"\"\\^", "$1^"); 
String finalResult = intermediateResult.replaceAll("(TEST\\^[^^]*\\^)(\\^[^^]*\\^[^^]*\\^([^\"\\^].*|\"[^\"].*))", "$1ST$2"); 

當我更換^(何地需要)|如下 - 我沒有得到期望的結果(不指定字符串中的任何改變):

String intermediateResult = in.replaceAll("(TEST\\|[\\|\\|]*\\|[\\|\\|]*\\|[\\|\\|]*\\|[\\|\\|]*\\|)\"\"\\|", "$1|"); 
String finalResult = intermediateResult.replaceAll("(TEST\\|[\\|\\|]*\\\\|)(\\|[\\|\\|]*\\|[\\|\\|]*\\|([^\"\\^].*|\"[^\"].*))", "$1ST$2"); 

是否有任何已知問題|在Java的正則表達式或我需要有不同的搜索字符的正則表達式|

所以,我想通過這種方式,卻徒勞無功(有\\ |代替\ |):

首先正則表達式改變了像所有的地方|「」 |在給定的字符串中,儘管我希望只有在第5次和第6次出現|時纔會使其變爲空白是「」,不知道爲什麼。 由於某種原因,第二個正則表達式完全不會改變字符串。

String intermediateResult = in.replaceAll("(TEST\\|[\\|\\|]*\\\\|[\\|\\|]*\\\\|[\\|\\|]*\\\\|[\\|\\|]*\\\\|)\"\"\\|", "$1|"); 
String finalResult = intermediateResult.replaceAll("(TEST\\|[\\|\\|]*\\\\|)(\\\\|[\\|\\|]*\\\\|[\\|\\|]*\\|([^\"\\^].*|\"[^\"].*))", "$1ST$2"); 

2)此外,這是什麼正則表達式匹配的部分,並更換STR暗示:

String finalResult = intermediateResult.replaceAll("(TEST\\^[^^]*\\^)(\\^[^^]*\\^[^^]*\\^ 
**([^\"\\^].*|\"[^\"].*)**)", "**$1ST$2**"); 

的混亂和長後感到十分抱歉;爲了清楚起見,我將僅發佈一個問題並將其他問題發佈在另一個帖子中。

在闡述從原始電子郵件的第一個問題:

我有以下的字符串(每個線由\ r \ n隔開)。第一個與搜索字符相關的正則表達式|應該檢查第二次和第三次出現的內容是空白的,如果第5和第6之間的內容|是「」,然後將其設爲空白。

第二次正則表達式(再次涉及| |)必須看看第5次和第6次之間的內容是否出現|不爲空且不爲空,則將第二次和第三次之間的內容作爲ST。

實施例,如下所示:

現有字符串:

TEST|X||Y||**""**|C|""|\r\n\ 
TEST|Z||Y||SOMETHING OTHER THAN "" OR empty||\r\n\ 

希望的輸出,當|兩個相關的正則表達式replaceall()從原始發佈的運行:

TEST|X||Y|||C|""|\r\n\ 
TEST|Z|**ST**|Y||SOMETHING OTHER THAN "" OR empty||\r\n\ 
+3

請詳細說明你的問題。你想表達什麼? *對於搜索字面值有什麼作用| *是什麼意思? – 2010-09-26 15:41:56

+2

Java中的正則表達式!請停止傷害我的眼睛! ......在更嚴肅的語氣中,當正則表達式不被Java的這個缺點變得更加難以理解時,正則表達式問題會好得多。只需發佈正則表達式並擺脫Java。除非這個問題實際上是關於Java的(我無法理解它)。 – 2010-09-26 16:09:46

+1

不要在單個帖子中提出多個問題。 – 2010-09-26 16:14:45

回答

1

我發現一個錯誤您的轉換。模式[^^]的意思是「一個字符,這不是'^'」。因此,要將它轉換爲「|」,它將是[^|](在[]內部,|不需要轉義|)。

現在我要拿叉子刺我的眼睛。我再也不想看到這些了。

+0

感謝您的輸入!很抱歉,很長的正則表達式。所以你提到的更正是在第二個正則表達式中 - String finalResult = intermediateResult.replaceAll(xxxxx)在第二個代碼片段中提到?再次感謝! – 2010-09-26 20:20:23

+0

是的,用[^ |]替換所有[\\ | \\ |]。 – Cephalopod 2010-09-26 20:39:54

+0

謝謝。我做了這個改變,但ST在測試時沒有放置在所需的位置。更改內容如下: – 2010-09-26 21:34:27