2013-07-16 74 views
1

我是android開發新手。現在我受到了正則表達式模式的衝擊。我嘗試了很多東西,但徒勞無功。java等價於python正則表達式

我想找到用python編寫的正則表達式"r'\^\d+\~[A-Za-z~ ]+'"的java等價物。

在此先感謝

編輯:

其實我想解析字符串:

「0〜XYZ〜XAMP吸血鬼〜XMP〜吸血鬼CENET ~~ 2013年7月9日-16-39-25 ~~~~^12345〜VAMPIRE CITY〜Vampire City〜VMC〜Vampire Center〜VPC〜Xamp Center〜XMPC〜Xamper VC〜XMVX〜07.50〜09.45〜01.55〜1111111 ~~~~~~~ 〜0001001000 ~~~~~~~~~~~ MAIL_EXPRESS〜4640〜1〜0〜0〜2013年7月8日〜2018年7月8日〜84〜43〜MAIL_EXPRESS:84:1085,1085,675,0,575 ,0:650,650,415,315,355,965:460,460,295,260,250,720:245,245,165,100,145,345:280,280,190,0,165,0:135,135,9 0,90,80,170:55,45,40,10,35,45:0,0,0,0,0,0:40,30,40,0,40,40〜0〜0 ~~ 60〜1城市快車~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~城際快車~~~~~~~~~~~~~~~~ 2S:d,D1,2S:C,C1,CC:,, 2S:,, 2S:,, 2S:,, 2S:,, 2S:,, 2S:,, 2S:,, 2S:,, 2S: ,, GSLR:〜0〜」

我寫在Python作爲reg1=re.compile(r'\^\d+\~[A-Za-z~ ]+')正則表達式,它給了我一個結果作爲['^12345~VAMPIRE CITY~Vampire City~VMC~Vampire Center~VPC~Xamp Center~XMPC~Xamper VC~XMVX~']數組。我只是想在java中重現這一點。我嘗試了很多組合,並且npinti暗示,但失敗了。請幫忙。

回答

0

後三小時追捕的(因爲是初學者在android系統),我找到了正確的事情,終於來了!

String myRegex = "[\\^]\\d{5}~[A-Za-z~ ]+"; 

這給了我我需要的東西。感謝所有那些試圖幫助我的人:-)

2

這應該工作:r'\\^\\d+~[A-Za-z~ ]+。它應該匹配r後跟一個',然後跟着一個^,一個或多個數字後跟一個~以及一個或多個字母重複,~和一個空格。

在Java中\是一個特殊字符,所以它需要進行轉義,這就是爲什麼我們在用正則表達式引擎所需要的\前面有多餘的\

編輯:我無法找到r'開始的Python正則表達式,所以我假設你需要匹配。如果不是這種情況,只需使用\\^\\d+~[A-Za-z~ ]+即可。

編輯:

此代碼似乎工作:

 String file = "0~XYZ~Xamp Vampire~XMP~Vampire Cenet~~2013-7-9-16-39-25~~~~^12345~VAMPIRE CITY~Vampire City~VMC~Vampire Center~VPC~Xamp Center~XMPC~Xamper VC~XMVX~07.50~09.45~01.55~1111111~~~~~~~~0001001000~~~~~~~~~~~MAIL_EXPRESS~4640~1~0~0~2013-07-08~2018-07-08~84~43~MAIL_EXPRESS:84:1085,1085,675,0,575,0:650,650,415,315,355,965:460,460,295,260,250,720:245,245,165,100,145,345:280,280,190,0,165,0:135,135,90,90,80,170:55,45,40,10,35,45:0,0,0,0,0,0:40,30,40,0,40,40~0~0~~60~1~6303~~~Intercity Express~~1~SR~~BG~~~10010~,,En:,,GS:,,GSLRD:,,GS:,,2S:,,2S:,,2S:,,2S:D,D1,2S:C,C1,CC:,,2S:,,2S:,,2S:,,2S:,,2S:,,2S:,,2S:,,2S:,,2S:,,GSLR:~0~"; 
     Pattern p = Pattern.compile("\\^\\d+\\~[A-Za-z~ ]+"); 
     Matcher m = p.matcher(file); 
     if(m.find()) 
     { 
      System.out.println(m.group(0)); 
     } 
     System.out.println("Finished"); 

產量:

^12345~VAMPIRE CITY~Vampire City~VMC~Vampire Center~VPC~Xamp Center~XMPC~Xamper VC~XMVX~ 
Finished 

整個r'事情似乎已經給了我一些麻煩,我實際上省略初始\\在我以前的編輯(它現在已被修復)。我基本上使用了@Kent所建議的同樣的正則表達式(所以他應該是應該被接受的答案)。我只是添加了一些Java代碼,以更好地幫助你獲得你想要的東西:)。

+0

我相信'r'不是Python中的正則表達式的一部分。 :) – Kent

+0

@Kent:我找不到任何使用'r'的例子,所以我認爲OP也想要匹配它。如果情況並非如此,那麼我也會對此表示讚賞,這實質上就是您發佈的內容。 – npinti

+0

沒關係。你可以在這裏找到它:http://docs.python.org/2/reference/lexical_analysis.html#string-literals實際上,OP讓我們有點困惑。他說py中有一個正則表達式。我相信他的意思是'r'\ \ \ d + \〜[A-Za-z〜] +''但他引用了整個事情。它可能會誤導人們認爲雙引號之間的文本是Python中的正則表達式... – Kent

2

你只需用雙反斜槓替換反斜槓即可。試試這個字符串(在Java)爲正則表達式:

String myRegex = "\\^\\d+\\~[A-Za-z~ ]+"; 
+0

我不能爲你投票,因爲我的名聲較差,但非常感謝你 –