/ / Регекс: Група АБО Група - регулярний вираз, стан, кома, регулярна група, місто

Регулярний вираз: група OR Group - регулярний вираз, стан, кома, регулярна виправлення, група, місто

У мене надходить текстовий файл із обмеженою смугою, де поле має містити стан кома міста. Приклад:

|Boston, MA|

У своїй програмі мені потрібно захопити місто та штат у вигляді двох різних полів. Це частина більшого Regex для обробки цілого рядка, але ця частина, яка обробляє це поле, це:

|(.+),(.+[^|]+)|

І це фіксує текст перед комою в одну групу, а текст після - в іншу. Чудово працює, коли поле заповнено, як очікувалося.

Моя проблема полягає в тому, що іноді в це поле надходить будь-яке:

  • Ніякої інформації між брусками (||)

або - Текст без коми (|unknown|)

І мені потрібно змінити цей регулярний вираз так, щоб:

  • Якщо між рядками немає інформації, я все одно отримую 2 групи з порожніми значеннями

  • Якщо є рядок тексту без коми, цей рядок потрапляє у групу як перша, а група 2 - із порожнім значенням

Відповіді:

2 для відповіді № 1

За допомогою цього регулярного виразу ви повинні отримати те, що очікуєте:

|s*([^,|]*?)s*(?:,s*([^|]*?)s*)?|

Він заповнює групи 1 і 2. Якщо кома немає, ви отримуєте порожню групу 2. Якщо між брусками немає значення (або пробілу), ви отримуєте дві порожні групи.

Якщо ви хочете, щоб пробіли були частиною відповідностей, регулярний вигляд виглядатиме так:

|([^,|]*)(?:,([^|]*))?|