正则表达式模式在Android中没有加工,但在其他平台上匹配

时间:2016-04-07 17:22:49

标签: android regex

我到处寻找解决方案,我尝试过使用不同的正则表达式标志,但没有成功。

我有以下正则表达式模式:

private static String LAST_LOG = "/.*?Last login:.*?td.*?td.*?([A-Za-z]+).*?;([0-9]+).*?;([0-9]+).*?;([0-9]+):([0-9]+):([0-9]+).*?([A-Z]+)/";

我试图在string中找到匹配项。

如您所见,它找到了匹配项,并在7组(月,日,年,时,分,秒,时区)中捕获数据。

问题在于我根本没有匹配,我已经测试了字符串,它确实包含我正在寻找的部分,所以我找不到任何一个其他原因导致Android无效。

    m = getMatcher(content,LAST_LOG);
    if(m.find()) {
        Log.e("Month",m.group(1));
        Log.e("Day",m.group(2));
        Log.e("Year",m.group(3));
        Log.e("Hour",m.group(4));
        Log.e("Minute",m.group(5));
        Log.e("Second",m.group(6));
        Log.e("Timezone",m.group(7));
    }
private static Matcher getMatcher(String str, String regex){
    Pattern pattern = Pattern.compile(regex);
    return pattern.matcher(str);
}

这不是导致我麻烦的唯一正则表达式,我还有其他正在运行的正则表达式,但简单的修改使它们失败,即使在其他平台(和在线正则表达式测试人员)上也能正常工作。

我在Python脚本中使用相同的正则表达式并且它没有任何问题地工作:

regex_last = r'.*?Last login:.*?td.*?td.*?([A-Za-z]+).*?;([0-9]+).*?;([0-9]+).*?;([0-9]+):([0-9]+):([0-9]+).*?([A-Z]+)'
m = re.search(regex_last,content.decode())
if m:
    print(m.group(1))
    print(m.group(2))
    print(m.group(3))
    print(m.group(4))
    print(m.group(5))
    print(m.group(6))
    print(m.group(7))
else:
    print('No match')

输出:

Apr
07
2016
17
33
52
CEST

我接近转换为HTML解析器,但由于我已经在Python和Android中使用了正则表达式,并且我认为使用正则表达式可以更容易地在平台之间切换,我决定使用它们。

1 个答案:

答案 0 :(得分:1)

您需要从开头和结尾删除/。我也会从一开始就删除.*?,因为它没有任何意义,但会减慢速度。

private static String LAST_LOG = "Last login:.*?td.*?td.*?([A-Za-z]+).*?;([0-9]+).*?;([0-9]+).*?;([0-9]+):([0-9]+):([0-9]+).*?([A-Z]+)";