模式正则表达式忽略引号和单引号的反斜杠

时间:2018-05-14 18:00:39

标签: android regex

我正在使用以下模式,

public static final String DEGREE_SIGN = "°";
 public static final Pattern DMS = Pattern.compile("^\\s*(-?\\d{1,3})\\s*" + DEGREE_SIGN
            + "+\\s*(\\d{1,2})\\s*\'"
            + "+\\s*(\\d{1,2}\\.+?\\d{0,6})\\s*\"+$");

尝试将字符串作为"38° 53' 23\""

Matcher m = DMS.matcher(latitudeDMSString);
                if (m.find())
                {
}

然而它失败了。在调试中我可以看到正则表达式为

java.util.regex.Matcher[pattern=^\s*(-?\d{1,3})\s*°+\s*(\d{1,2})\s*'+\s*(\d{1,2}\.+?\d{0,6})\s*"+$ region=0,11 lastmatch=]

似乎正在删除\前面的'"如何解决此问题

  

public static final Pattern DMS =   Pattern.compile(“^ \ S *( - ?\ d {1,3})\ S *°+ \ S *(\ d {1,2})\ S * \'+ \ S *(\ d { ??1,2} \ \ d {1,4})\ S * \ “+ $”);

2 个答案:

答案 0 :(得分:1)

您需要在正则表达式中更改此部分:

\\.+?

\\?

基本上你是想让点可选,而使用\.+?只会使它成为懒人比赛的次数。

RegEx Demo

答案 1 :(得分:0)

在java中,以下是转义字符: -

  • \'此时在文本中插入单引号字符。
  • \“此时在文本中插入双引号字符。
  • \此时在文本中插入反斜杠字符。

因此,为了在java中的字符串中使用\'和\“,我们需要分别使用\\\'和\\\”来转义这些字符。