2017-10-20 88 views
0

我需要在解析文件時找到'} {「_id」。Scala:正則表達式給出「非法重複」錯誤

該圖案內可能有任何數量的空白或沒有空白。我不想替換文件中的任何其他空白區域,除非匹配該模式。我想用'},{「_ id」'替換。

我試圖在scala代碼和正則表達式它不斷給我'非法重複'的錯誤。

正則表達式查找字符串我試圖用的是

fileTxt.replaceAll("[\\s]+}[\\s]+{[\\s]+\"_id\"", "},{\"_id\"") 

我怎樣才能做到這一點?

+1

請提供您使用的代碼示例/數據。這將有助於 – Pavel

+0

{「_id」:「101」,「author」:「testauthor1」,「books」:[{「title」:「title1」,「publisher」:「xyz」\t}] **} {「 _id「**:」102「,」author「:」testauthor2「,」books「:[{」title「:」title2「,」publisher「:」abc「\t}}} –

回答

0

在Java正則表達式中使用{}字符將子模式標記爲具有重複值。所以,

"\\s{3,4}" 

是指示三到四個連續的空格應該匹配的模式。

您應該更改正則表達式來轉義「{」和「}」字符。

fileTxt.replaceAll("[\\s]+\\}[\\s]+\\{[\\s]+\"_id\"", "},{\"_id\"") 
+0

Bob,非常感謝。它仍然似乎沒有使用這個示例文本:{「_id」:「101」,「author」:「testauthor1」,「books」:[{「title」:「title1」,「publisher」:「 xyz「\t}] **} {」_id「**:」101「,」author「:」testauthor1「,」books「:[{」title「:」title1「,」publisher「:」xyz「\t} ]} –

+0

但是'+'匹配一次或多次。 '*'匹配零次或多次。 –

0

該錯誤消息是由於特殊字符正則表達式和{}匹配圖案沒有逃脫。一些附加說明:1)使用*來匹配0或更多(而不是+爲1或更多)空格,並且2)使用"""來包含您的模式匹配表達式,以避免像雙反斜槓那樣的轉義:

val s = """} { "_id"""" 

s.replaceAll("""\s*\}\s*\{\s*"_id"""", """\},\{"_id"""") 
// res1: String = },{"_id"