簡體   English   中英

在Java Regex中匹配A而不是B?

[英]Matches A but not B in Java Regex?

我有一份大文件。 讓它擴展到

location=State-City-House
location=City-House

所以我想做的是用一些其他字符串替換所有那些不以State開頭的東西。 說“紐約”。 但那些從國家開始的人必須保持不變。

所以我的最終結果是

location=State-City-House
location=NY-City-House

1.顯然我不能使用String.replaceAll()。

2.使用Pattern.matcher()很棘手,因為我們使用兩種不同的模式,其中一個必須找到,一個不能找到。

3.首先用“bocation = State”替換“location = State”然后替換其他的然后重新替換。

那么,一個簡潔明了的方法呢?

你肯定可以將replaceAll用於負向前瞻:

String repl = input.replaceAll( "(?m)^(location=)(?!State)", "$1NY-" );
  • (?m)設置MULTILINE修飾符,以便我們匹配每行中的錨點^$
  • (location=)匹配location=並捕獲組#1中的值
  • (?!State)State出現在捕獲的組#1即location=之后失敗匹配的負前瞻
  • 在替換時,我們使用$1NY-在開始時使其location=NY-

RegEx演示

如果我理解你的意圖正確,你的輸入中實際上沒有字符串“State”,而是表示狀態的不同字符串。 但是你的一些文本行完全錯過了州,只有城市和眾議院的名字。 那是對的嗎? 在這種情況下,兩種線之間的定義特征是破折號。

^location=([^-]+)-([^-]+)$

上面的正則表達式只匹配只有1個破折號的實線。

我可能誤解了這個任務。 如果您發布一些實際輸入會更容易。

暫無
暫無

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

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