#c#
#c#
Вопрос:
В этой проблеме у меня есть строка с адресом; однако ее не удалось отформатировать идеально. В моем примере у меня есть string candidate = «Дата на Джексон-авеню, 20-54) Бруклин, Нью-Йорк 11352» Причина, по которой это так, в том, что оно было прочитано из pdf, в котором есть столбцы, поэтому оно читается слева направо. Прямо сейчас я использую это регулярное выражение:
var reg = Regex.Match(candidate,
@"^(d*-?d*s)([N|S|W|E]s)?([A-z]*((s[A-z]*)?))s([A-z]*)s([A-z]*(s)?(([A-z]*)?),)");//(s[A-z]*s)(d*)");
Я полагаю, что причина, по которой это не работает, заключается в том, что ‘)’ после даты. Мне нужно сохранить адрес, город, штат и почтовый индекс по отдельности в отдельной переменной. Я использовал обычный string addypractice = reg.Groups[0].Value;
, но из-за левой круглой скобки он всегда выдает значение null. У кого-нибудь есть какие-либо советы о том, как справиться с этим, или есть более простой способ решить мою проблему? Спасибо!!
Комментарии:
1. Попробуйте это регулярное выражение. Это дает вам отдельные токены вашей строки.
([a-zA-z0-9] )(?!>))
Пример: regex101.com/r/7HUc9H/12. Как мне получить доступ к каждому токену, чтобы сохранить его внутри переменной? Также, как бы мне сделать его достаточно широким, чтобы сделать это для каждого возможного адреса? Адрес может иметь название одной улицы, например, Smith St. или, скорее, Water Circle Way. То же самое с городами: Нью-Йорк по сравнению с Олбани
3. Я думаю, вам следует более подробно объяснить, в чем заключается реальная проблема, которую вы хотите решить, и добавить еще несколько примеров допустимых и недопустимых значений. Возможно, с помощью другого фрагмента regex101.
4. Мне нужно создать функцию, которая передается в строке, содержащей адрес. Адрес может быть правильно отформатирован или содержать странные символы в середине. Я должен проанализировать строку и извлечь адрес (номер, название улицы и аббревиатуру Street), город, штат и почтовый индекс. Вот еще одна строка, которая передается, но имеет обычный формат: 595 Park Avenue New York, NY 10021
5. Единственная проблема в том, Рахул, что я не знаю, какие случаи у меня есть. Пользователь вводит файлы, а другая папка извлекает адреса, поэтому я понятия не имею, какой файл я получаю или как он отформатирован
Ответ №1:
Исключительно на основе входной строки, указанной в вопросе:
Регулярное выражение:
[a-zA-Z0-9-] [^!@#$%^amp;*(),.?":{}|<>,d{5}]*
Рабочий пример:https://regex101.com/r/7HUc9H/4
Это регулярное выражение учитывает другие сценарии, в которых перед вашим адресом стоят специальные символы:
Например, строки типа:
- Дата на Джексон авеню, 20-54″ Бруклин, Нью-Йорк 11352
- Дата на Джексон Авеню, 20-54} Бруклин, Нью-Йорк 11352
- Дата на Джексон Авеню, 20-54 * Бруклин, Нью-Йорк 11352
также будет проанализировано этим регулярным выражением. Вы могли бы даже добавить больше классов символов к этому регулярному выражению на основе ваших требований.
Редактировать:
C # -код для чтения вашей строки и сопоставления с приведенным выше регулярным выражением для получения желаемого результата:
using System;
using System.Linq;
using System.Text.RegularExpressions;
namespace Test1
{
public static class Program
{
public static void Main(string[] args)
{
string str = "20-54 Jackson Avenue Date) Brooklyn, NY 11352";
string[] result =Regex.Matches(str, "[a-zA-Z0-9-] [^!@#$%^amp;*(),.?":{}|<>,\d{5}]*").Cast<Match>().Select(x=>x.Value).ToArray();
Console.WriteLine("Address:" result[0].Trim());
Console.WriteLine("City:" result[1].Trim());
Console.WriteLine("State:" result[2].Trim());
Console.WriteLine("Zip Code:" result[3].Trim());
Console.ReadLine();
}
}
}
Вывод:
Комментарии:
1. Мне просто интересно, как я буду получать доступ к каждой части информации, поскольку все они находятся в одной группе.
2. Обновил мой ответ кодом C #, чтобы прочитать вашу строку и использовать регулярное выражение в ответе для анализа вашей информации.
3. Ты спасаешь жизнь, парень!! Осталась всего одна мелочь. Извините, если я раздражаю. Я пытался возиться с регулярным выражением, но как мне игнорировать любую информацию после почтового индекса? например, скажем, строка «1234 S Mary Dr New York, NY 10234 aoerngieron»
4. Nvm Я понял!! Большое вам спасибо за вашу помощь!!