[英]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-
。 如果我理解你的意圖正確,你的輸入中實際上沒有字符串“State”,而是表示狀態的不同字符串。 但是你的一些文本行完全錯過了州,只有城市和眾議院的名字。 那是對的嗎? 在這種情況下,兩種線之間的定義特征是破折號。
^location=([^-]+)-([^-]+)$
上面的正則表達式只匹配只有1個破折號的實線。
我可能誤解了這個任務。 如果您發布一些實際輸入會更容易。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.