# Нужно регулярное выражение для координат

8 августа 2021 в 17:57
37
2

Я пишу один Java-код и читаю координаты в виде строки в коде, У меня есть несколько координат, как показано ниже, и я хочу написать регулярное выражение для их проверки. Кто-нибудь может помочь?

``````"51.057,6.76;51.059,6.759;51.062,6.76;51.063,6.76;51.064,6.76;51.067,6.761;51.07,6.762;51.072,6.763;51.074,6.765;51.076,6.767;51.077,6.769;51.078,6.772;51.079,6.776;51.079,6.776;51.079,6.776;51.08,6.78;51.08,6.78;51.081,6.782;51.082,6.783"
``````

здесь несколько координат разделены ;

и для каждой координаты X и Y разделены ,

8 августа 2021 в 18:02

Возможно, вам лучше проверить, разбирая двойники. Во-первых, нелегко писать регулярные выражения для проверки того, что десятичные точки не удваиваются.

8 августа 2021 в 19:13

`want to write Regular Expression to validate the same` - Что вы хотите проверить?

## Ответы (2)

11 августа 2021 в 07:08

Проверить координаты как двойные:

См. контекст и тестовую среду ниже:

``````public static void main(String[] args) throws IOException {
String input = "51.057,6.76;51.059,6.759;51.062,6.76;51.063,6.76;51.064,6.76;51.067,6.761;"
+ "51.07,6.762;51.072,6.763;51.074,6.765;51.076,6.767;51.077,6.769;51.078,6.772;"
+ "51.079,6.776;51.079,6.776;51.079,6.776;51.08,6.78;51.08,6.78;51.081,6.782;51.082,6.783;"
+ "A,4.0;BB,53.1";

List<String> coordinates = Arrays.asList(input.split(";"));

Pattern splitByCommaPattern = Pattern.compile(",");// Always pre-compile regex before loop

// Validate that co-ordinates are doubles and store in list as Double
List<Map<String, Double>> result = new ArrayList<>();
for (String xyAsString : coordinates) {
String[] xySplit = splitByCommaPattern.split(xyAsString);
String xAsString = xySplit;
String yAsString = xySplit;
}

System.out.println("\nPrint result:");
result.forEach(xyMap -> System.out.printf("X = '%s' and Y = '%s' %n", xyMap.get("x"), xyMap.get("y")));

}

private static void addXYtoResult(String xAsString, String yAsString, List<Map<String, Double>> result) {
try {
Map<String, Double> xyMap = new HashMap<>();
xyMap.put("x", Double.parseDouble(xAsString));
xyMap.put("y", Double.parseDouble(yAsString));
} catch (NumberFormatException nfe) {
System.out.printf("This co-ordinate does not have "
+ "valid number format and cannot be parsed "
+ "to doubles: '%s,%s'.%n", xAsString, yAsString);
}
}
``````

Вывод:

``````This co-ordinate does not have valid number format and cannot be parsed to doubles: 'A,4.0'.
This co-ordinate does not have valid number format and cannot be parsed to doubles: 'BB,53.1'.

Print result:
X = '51.057' and Y = '6.76'
X = '51.059' and Y = '6.759'
X = '51.062' and Y = '6.76'
X = '51.063' and Y = '6.76'
X = '51.064' and Y = '6.76'
X = '51.067' and Y = '6.761'
X = '51.07' and Y = '6.762'
X = '51.072' and Y = '6.763'
X = '51.074' and Y = '6.765'
X = '51.076' and Y = '6.767'
X = '51.077' and Y = '6.769'
X = '51.078' and Y = '6.772'
X = '51.079' and Y = '6.776'
X = '51.079' and Y = '6.776'
X = '51.079' and Y = '6.776'
X = '51.08' and Y = '6.78'
X = '51.08' and Y = '6.78'
X = '51.081' and Y = '6.782'
X = '51.082' and Y = '6.783'
``````
8 августа 2021 в 18:06
``````//Count the repetitions for 'N' N = 19?
final String RE_COORDS = "(?:\\d+\\.\\d+,\\d+\\.\\d+;)+\\d+\\.\\d+,\\d+\\.\\d+";
``````

Возможно, вам будет лучше выполнить проверку путем разбора двойников. Во-первых, нелегко писать регулярные выражения для проверки того, что десятичные точки не удваиваются

.
8 августа 2021 в 18:12

Спасибо за помощь, мы не можем предсказать количество координат, их может быть сколько угодно,

8 августа 2021 в 18:16

Кроме того, я не могу просто проверить на основе точки с запятой (;), как я уже упоминал, координаты X и Y разделены запятой (,) , а несколько координат разделены точкой с запятой (;)

8 августа 2021 в 18:29

См. исправление. Вы можете изменить количество групповых повторов

11 августа 2021 в 08:36

Зачем использовать `+` для неперехватывающей группы, а не `*`? Это выражение не будет проверять случай, когда имеется только одна координата.