2013-08-29 48 views
3

我有一塊文本。我的正則表達式沒有返回我需要的東西

google.sbox.p50 & & google.sbox.p50([ 「如何做」,[ 「如何打領帶」,0],[ 「馴龍高手2預告片」,0 ],[「如何做杯子歌曲」,0],[「如何在3分鐘內獲得六包」,0],[「如何製作射擊的紙槍」,0],[基本的「,0],[」如何愛lil wayne「,0],[」如何唱你喜歡的藝術家「,0],[」如何成爲一個令人心碎的碼頭和鑽石「,0],[如何馴服馬中的Minecraft」,0]],{ 「q」: 「XJW - 0IKH6sqOp0ME-x5B7b_5wY」, 「J」: 「5」, 「K」:1}])

使用\\[([^]]+)\\]我能夠得到我需要的一切,但有一點額外,我沒有。我不需要["how to",[[。我只需要被格式化像塊,

["how to tie a tie",0]

有人可以幫我修改我的表情只得到我需要什麼?我已經呆了好幾個小時了,我無法理解RegEx的想法。

+0

感謝大家。你的所有答案都適合我,但我只能作出我的答案。再次感謝。 – ArtW

+0

你應該可以投票回答:) – Jerry

+0

如果你的「如何」包含一個'''字符? –

回答

1

我認爲這是你在找什麼,以匹配["how to tie a tie",0]格式:

(\["[^"]+",\d\]) 

() - 圍繞整個事情,所以這一切本組
\["在被抓獲 - 找到["
[^"]+ - 找到一個或多個除"
", - 查找",
\d - 找一個號碼,如果你需要的不僅僅是一個單一的數字更多,做的\d+
\] - 在這個正則表達式匹配的結束]

唯一的變數事情是無論是引號([^"]+)和數字之內( \d+)。

Demo

如果你不希望捕獲組在方括號中,你可以做這樣的:

\[("[^"]+",\d+)\] 

我假設你不想匹配,如果有報價您引號內,它可能會打破你正在使用它不管出於什麼目的,但如果這樣做,這應該工作:

\[("[^[\]]+",\d+)\] 
+0

感謝百萬。對我來說實際上阻止了我詢問我的其他表情 – ArtW

+0

@ArtW,出於好奇,如果你不介意分享 - 其他問題/表達是什麼? – smerny

+0

我想得到「XJW - 0IKH6sqOp0ME-x5B7b_5wY」。所以在你的幫助下,我想出了\ {\「[az] \」\:\「\ w * \」,它給了我更多的話,但我想用.split(':')[1]我知道我有很多東西需要學習RegEx – ArtW

3

把開方括號和方括號都放在否定字符類中?

\\[([^][]+)\\] 

\\[相匹配的文字[

\\]相匹配的文字]

[^][]是一個否定的類,它例如任何字符匹配除了][。看起來可能有點困難,但它相當於[^\\]\\[]。在這裏,因爲你使用的是字符類(就像\\.相當於[.]

([^][]+)捕捉方括號內的所有雙逃逸不是必需的,確保沒有][內。

在C#中,你可以使用@符號,以避免雙重逃生每次使用這使得正則表達式這樣的:

var regex = new Regex(@"\[([^][]+)\]"); 

注:此正則表達式將方括號內捕捉一切。如果你想具體獲得格式["how to tie a tie",0],你可以更精確。畢竟,正則表達式將只匹配的東西,你讓它匹配:

var regex = new Regex(@"\["[^"]+",0\]"); 

在這裏,我們有另一個否定字符類:[^"]。這將匹配任何不是引號字符的字符。

這一個假定數字始終爲0,如示例文本塊中所示。如果你有一個數字的多種可能性,則可以使用字符類[0-9]+

var regex = new Regex(@"\["[^"]+",[0-9]+\]"); 

您可以使用\d+爲好,但這個字符類也符合other characters可能會或可能不會使正則表達式更糟。如果你想更甚至謹慎允許可能空格,製表符,換行符,形式之間的字符飼料中,你可以使用這個表達式:

var regex = new Regex(@"\[\s*"[^"]+"\s*,\s*[0-9]+\s*\]"); 

結論,有可能是它適合你需要的東西很多正則表達式,只要確保你知道你的數據是如何通過的,所以你可以選擇一個具有適當數量的高速公路。

0

您必須使用此模式約方括號here

@"\[[^][]+\]" 

更多信息。

0

我認爲你需要這一個:(\[[^\[^]+?])

你做錯了什麼? (最小匹配)並排除任何[]

0

看起來外部括號中的文字是對象的JSON表示形式。取而代之的是正則表達式的我正:

  1. 剝去東西托架+第一托架(google.sbox.p50 && google.sbox.p50()之前加上剝離尾部托架)。有更多的方法來做到這一點,它可以比正則表達式更有效。
  2. JSON解析剩餘的內部部分。
  3. 從這一點你有對象表示,你可以省去你不需要的數組的第一個元素,再加上你可以遍歷所有其他的元素。

最後還有會話信息和參數(在{}括號中),所以最終你最終可能會解析一些東西。最好不要重新發明輪子(JSON解析)。

相關問題