具有无效转义序列的Java正则表达式
我对Regex不熟悉 我在地址FORMAT中有数据(字符串[]数组) 范例具有无效转义序列的Java正则表达式,java,regex,Java,Regex,我对Regex不熟悉 我在地址FORMAT中有数据(字符串[]数组) 范例 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:
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-else来检查字符串大小。并且使用了一些方法来得到我想要的结果
我想改进我的功能
所以,我现在要做的是,创建一些正则表达式模式并使用switch语句
所以,我对regex是新手,我在我的完整字符串上尝试了这个模式,它确实匹配,并在4组中给出了一个结果,我在这里尝试了()
这个模式与我的字符串匹配
但当我在eclipse中尝试它时,它给了我错误
Invalid escape sequence (valid ones are \b \t \n \f \r \" \' \\ )
我在我的模式中寻求帮助,为什么我会出现这个错误?没有人能够维护这个正则表达式,更不用说理解它了;最好编写一个简单的解析器。i、 e:
String[] addresses = ...;
for (String address : addresses) {
String[] parsed = address.split(",");
String str = parsed[0];
// etc..
}
您可以定义一些更具体的规则,但这只是一个示例 没有人能够维护这个正则表达式,更不用说理解它了;最好编写一个简单的解析器。i、 e:
String[] addresses = ...;
for (String address : addresses) {
String[] parsed = address.split(",");
String str = parsed[0];
// etc..
}
您可以定义一些更具体的规则,但这只是一个示例 反斜杠
\
是java转义符号和正则表达式转义符号
当你使用像e这样的字符串时。g<代码>“\n”,这被视为换行。就像这样,每个\
都是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})$"
反斜杠
\
是java转义符号和正则表达式转义符号
当你使用像e这样的字符串时。g<代码>“\n”,这被视为换行。就像这样,每个\
都是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})$"
必须添加两个反斜杠才能转义字符串
这应该是:
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]{0-9]),](\\s+[a-zA-z]{6}”)代码>必须添加两个反斜杠才能转义字符串
这应该是: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]{0-9]),](\\s+[a-zA-z]{6}”)代码>您的模式到处都是错误。普通正则表达式中的模式\d+
在Java模式中变为\\d+
,其余的依次类推。您需要双重转义\I相信在修复模式后,您应该测试它以确保它达到预期效果。除此之外,您可能还有其他问题。您的模式充满了错误。普通正则表达式中的模式\d+
在Java模式中变为\\d+
,其余的依次类推。您需要双重转义\I相信在修复模式后,您应该测试它以确保它达到预期效果。除此之外,您可能还有其他问题。这是我现在使用的,但我将用我的模式检查完整字符串。如果匹配,我将在下一个类中解析它。这是我现在使用的,但是我将用我的模式检查完整的字符串。如果匹配,我将在下一个类中解析它。