Java Regex具有无效的转义序列

时间:2017-08-03 14:56:20

标签: java regex

我是Regex的新手。

我在地址格式

中有数据(String []数组)

例如

105 MyOwn St, City, ON A1B 2C3, Canada

有时我得到它

 -  MyOwn st, City, A1B 2C3, Canada
 - City, A1B 2C3
 - 105 MyOwn St, City, ON A1B 2C3
 - City, ON A1B 2C3, Canada

我想要以下结果

Street: 105 MyOwn St or MyOwn st
City: City
Postal Code : A1B 2C3
Country : Canada

^ 我用if if来检查字符串大小。并使用一些方法来获得我想要的结果。

我想改进我的功能。

所以,我现在要做的是,创建一些正则表达式模式并使用switch语句。

所以,我是regex的新手,我在我的完整字符串上尝试了这个模式它确实匹配并在4组中给我一个结果,我在这里试了一下(http://regexr.com/

Pattern datePatt = Pattern.compile("^(\d+\s+[a-zA-z]+\s+\w+)[,](\s*[a-zA-Z]+)[,](\s+[a-z|A-Z]{2}\s+[a-zA-Z][0-9][a-zA-Z]\s*[0-9][a-zA-Z][0-9])[,](\s+[a-zA-Z]{6})$");

此模式匹配我的字符串

但是当我在eclipse中尝试它时它给了我错误

Invalid escape sequence (valid ones are  \b  \t  \n  \f  \r  \"  \'  \\ )

我正在寻找我的模式中的帮助,为什么我收到此错误?

3 个答案:

答案 0 :(得分:3)

反斜杠\是java转义符号以及正则表达式转义符号。

当你使用像e这样的字符串时。 G。 "\n",这被视为换行符。就像这样,每个\<sign>都是java字符串中的特殊字符。如果要在字符串中使用反斜杠,则必须将其转义,得到双反斜杠\\

你不想拥有java转义序列,但是想要正则表达式,因此你需要双重转义所有内容:

"^(\\d+\\s+[a-zA-z]+\\s+\\w+)[,](\\s*[a-zA-Z]+)[,](\\s+[a-z|A-Z]{2}\\s+[a-zA-Z][0-9][a-zA-Z]\\s*[0-9][a-zA-Z][0-9])[,](\\s+[a-zA-Z]{6})$"

答案 1 :(得分:2)

没有人能够保持那个正则表达式,更不用说理解它了;你最好写一个简单的解析器。即:

String[] addresses = ...;
for (String address : addresses) {
    String[] parsed = address.split(",");

    String str = parsed[0];
    // etc..  
}

您可以定义一些更具体的规则,但这只是一个示例;

答案 2 :(得分:1)

您必须添加两个反斜杠才能转义字符串。

这应该给出:Pattern datePatt = Pattern.compile("^(\\d+\\s+[a-zA-z]+\\s+\\w+)[,](\\s*[a-zA-Z]+)[,](\\s+[a-z|A-Z]{2}\\s+[a-zA-Z][0-9][a-zA-Z]\\s*[0-9][a-zA-Z][0-9])[,](\\s+[a-zA-Z]{6})$");