从python到Java的re.findall匹配,模式

时间:2019-06-24 07:44:04

标签: java python

我希望将re.findall(regex)转换为Java。 我知道如何使用匹配和模式,但是当我要找到多个正则表达式模式时,我将不得不多次编译它。例如;

text = "-3-testing"
text_temp = re.findall("(.?\d+.)",text) # here one time
if len(text_temp) != 0:
    if "-" in text_temp[0]:
        text_temp = re.findall("(\d+.\d+)", text) #here second time

上面是我的python代码,但是如果我想转换为java,则意味着我将需要编译2次,然后再次将其与文本匹配,然后重新提取这些匹配项。我想知道是否有更短的方法?

1 个答案:

答案 0 :(得分:1)

我认为您已经回答了您的问题-除非我遗漏了一些东西。


Pattern p = Pattern.compile("your regex");

然后,您可以根据需要使用Pattern的方法。 您可以根据需要编译任意数量的模式,并使用它们来生成尽可能多的匹配器。

例如:

Matcher m = p.matcher("some input");

然后您就可以使用Matcher提取所有数据,逐步进行匹配,替换等等...

对于具有多个模式,您将需要编译每个模式,除非可以将它们组合成一个。也许通过使用“替代”运算符“ |”或具有更通用(或更具体)的模式。这就引出了一个问题,为什么您要对某个通用的东西进行正则表达式以仅仅在下一步中对其进行更多限制?

也许您可以做这样的事情而只有一个?

Pattern p = Pattern.compile("-(\d+.\d+)");