我是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 \" \' \\ )
答案 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})$");