1

我是android开发的新手。现在我对正则表达式模式感到震惊。我尝试了很多东西,但都是徒劳的。

我试图找到"r'\^\d+\~[A-Za-z~ ]+'" 用python编写的正则表达式的java等价物。

提前致谢

编辑:

其实我想解析字符串:

"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~~~城际快车~~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~"

我在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 的建议,但都失败了。请帮忙。

4

3 回答 3

2

这应该工作:r'\\^\\d+~[A-Za-z~ ]+. 它应该匹配 anr后跟 a ',然后是 a ^,一个或多个数字后跟 a~和一个或多个重复的字母,~以及一个空格。

在java中\是一个特殊字符,所以它需要被转义,这就是为什么我们在正则表达式引擎所需的\前面有额外的。\

编辑:我找不到以 开头的 python 正则表达式r',所以我假设你需要匹配它。

如果不是这种情况,只需使用\\^\\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 代码来更好地帮助你得到你想要的东西:)。

于 2013-07-16T12:08:02.573 回答
2

你只需用双反斜杠替换反斜杠。试试这个字符串(在java中)作为正则表达式:

String myRegex = "\\^\\d+\\~[A-Za-z~ ]+";
于 2013-07-16T12:09:00.563 回答
0

经过三个小时的狩猎(因为我是 android 的初学者),我终于找到了正确的东西!

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

这给了我我需要的东西。感谢所有试图帮助我的人:-)

于 2013-07-17T08:54:27.757 回答