Исправлено выражение регулярного выражения, чтобы разрешить изменение введенного пользователем аббревиатуры. - PullRequest
0 голосов
/ 24 января 2020

Пользователи могут ввести аббревиатуру для «Почтового ящика» несколькими способами, например, PO Box, PO Box и т. Д. c.

Почтовые ящики всегда имеют номер после него.

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

Ищите выражение, которое соответствует 1-6 ниже, но не соответствует 7-10.

GPO Box = Главный почтовый ящик, и я пытаюсь избежать совпадений по ним. Я думаю, что выражение должно разрешать либо пустой, либо никакой другой символ перед 'P'.

Я придумал ниже, но он не пропускает блоки GPO или странные вещи, такие как 'PPO BOX'

P{1}\s?\.?O{1}\.?\s+(BOX)\s+[0-9]*

regex.com

  1. PO BOX 123
  2. PO BOX 655
  3. PO BOX 155
  4. PO BOX 1
  5. PO BOX 123
  6. blahblah PO BOX 123

  7. GPO BOX 123
  8. blah GPO BOX 111
  9. POB OX
  10. PP.O BOX 122

любая помощь будет оценена. Спасибо!

Ответы [ 2 ]

0 голосов
/ 24 января 2020

Вы можете использовать отрицательный вид сзади (?<!G\.?)P (P не предшествует G\.?):

WITH T (ID, STR) AS 
(
VALUES
  ( 1, 'PO BOX 123')
, ( 2, 'P.O BOX 655')
, ( 3, 'P.O. BOX 155')
, ( 4, 'PO BOX 1')
, ( 5, 'P O BOX 123')
, ( 6, 'blahblah PO BOX 123')
, ( 7, 'GPO BOX 123')
, ( 8, 'blah G P O BOX 111')
, ( 9, 'P O B OX')
, (10, 'PP.O BOX 122')

, (11, 'G.P.O BOX 122')
)
SELECT T.*
, REGEXP_LIKE(STR, '(?<!G\.?)P\s?\.?O\.?\s+BOX\s+[0-9]*') FLAG
FROM T

|ID         |STR                |FLAG |
|-----------|-------------------|-----|
|1          |PO BOX 123         |true |
|2          |P.O BOX 655        |true |
|3          |P.O. BOX 155       |true |
|4          |PO BOX 1           |true |
|5          |P O BOX 123        |true |
|6          |blahblah PO BOX 123|true |
|7          |GPO BOX 123        |false|
|8          |blah G P O BOX 111 |true |
|9          |P O B OX           |false|
|10         |PP.O BOX 122       |true |
|11         |G.P.O BOX 122      |false|
0 голосов
/ 24 января 2020

Как насчет этого?

'^\s*P[. ]*O[. ]*Box\s*[0-6]$'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...