【问题标题】:java equivalent of python regexjava 等价于 python 正则表达式
【发布时间】:2013-07-16 12:03:27
【问题描述】:

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

我正在尝试找到用 python 编写的正则表达式 "r'\^\d+\~[A-Za-z~ ]+'" 的 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 的建议,但都失败了。请帮忙。

【问题讨论】:

    标签: java android python regex


    【解决方案1】:

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

    String myRegex = "\\^\\d+\\~[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 代码来更好地帮助你得到你想要的:)。

    【讨论】:

    • 我相信r 不是python 正则表达式的一部分。 :)
    • @Kent:我找不到任何使用 r' 的示例,所以我假设 OP 也想匹配它。如果不是这种情况,那么我也对此进行了修改,这基本上就是您发布的内容。
    • 没关系。你可以在这里找到它:docs.python.org/2/reference/… 实际上,OP 让我们有点困惑。他在 py 中说了一个正则表达式。我相信他的意思是r'\^\d+\~[A-Za-z~ ]+',但他又引用了整件事。它可能会误导人们认为双引号之间的文本是python中的正则表达式......
    • @Kent 我明白了。如果是这种情况,那么您的答案是正确的。给我点赞:)。
    • r 用于原始字符串 - 不是正则表达式部分:-)
    【解决方案3】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2012-06-19
      • 2022-01-05
      • 2012-01-07
      • 1970-01-01
      • 1970-01-01
      • 2010-10-08
      • 2011-08-24
      • 1970-01-01
      相关资源
      最近更新 更多