Используя регулярное выражение, мне нужно сопоставить все, кроме определенного формата даты - PullRequest
0 голосов
/ 09 ноября 2018

Всем после полудня, долгое время скрыватель / зритель и впервые спрашивающий :) борется со следующей проблемой и будет очень признателен за помощь в этом вопросе.

Я немного поиграл с Regular Expression, и теперь мне нужно реализовать его как часть проекта, над которым я работаю с использованием OCR.

Фон

В настоящее время я работаю над решением, в котором мы выполняем зональное распознавание текста для документов, чтобы зафиксировать дату документа. Это хорошо, и мы можем точно зафиксировать дату. Однако, в зависимости от содержимого документа, поле «дата» может перемещаться вниз по документу. Поэтому мы должны установить зону, в которой мы обнаруживаем текст в столбце, проходя прямо по документу. Это, в свою очередь, будет захватывать текст, который нам не нужен / не нужен, и мой единственный вариант удалить этот ошибочно захваченный текст - это сочетание функции «Заменить» (которая поддерживает сопоставление регулярных выражений) и регулярных выражений.

Выпуск

как часть процесса; как только мы захватим текст, мне нужно будет выполнить функцию «Заменить», я специально ищу замену всех текстов / символов / символов / разрывов строк и т. д., кроме определенного набора символов. В этом случае:

\d\d[.]\d\d[.]\d\d\d\d 

или

[0-9][0-9][.][0-9][0-9][.][0-9][0-9][0-9][0-9]

Несмотря на то, что я могу точно соответствовать этому шаблону, я не могу получить ни один код RegEx для успешного сопоставления с чем-либо, кроме вышеуказанного шаблона. (В этот момент я добавлю, что не уверен, что такое Regular Expression используется в продукте, с которым я работаю. Документация не самая лучшая :( Поэтому мне, возможно, потребуется найти несколько решений, чтобы проверить, какое из них работает . Если кто-нибудь знает о тесте, который я могу провести, чтобы определить вкус, я буду признателен.)

Ниже приведен пример текста, захваченного компонентом OCR:

"» Susi
Date of ti
31.10.2018
To preserve 
test is 31.0E
Location"

Я хочу сопоставить все здесь, кроме даты "31.10.2018". Затем я могу позже использовать функцию замены, чтобы опустить все, кроме этой даты.

Любая помощь будет принята с благодарностью, и, пожалуйста, спросите, требуется ли вам дальнейшие разъяснения.

Спасибо за вашу помощь в этом.

1 Ответ

0 голосов
/ 09 ноября 2018

Давайте поработаем с этим выражением:

\d\d[.]\d\d[.]\d\d\d\d

Если вы собираетесь использовать значение даты позже, вам нужно захватить соответствующую часть. Вы можете сделать это, поставив вокруг него круглые скобки, например:

(\d\d[.]\d\d[.]\d\d\d\d)

Теперь давайте попробуем сопоставить что-либо в строке, а затем дату. «Любой символ» в регулярных выражениях равен ., а любое их число равно .*. Итак, теперь у нас есть:

(.*)(\d\d[.]\d\d[.]\d\d\d\d)

Это будет соответствовать что угодно и затем дате. Вы обнаружите, что ваше «что-нибудь» зафиксировано в группе 1, а дата в группе 2. Если оно не совпадает, в строке нет даты.

Проблема возникает, когда у вас в строке более одной даты. По предпочтению что-нибудь максимально, поэтому, если есть две даты, вы найдете одну из них как часть группы 1 (что-нибудь) и вторую в группе 2. Если это не так что вы хотите, вы можете поставить ? после *, чтобы сделать его нежадным , и вы получите это:

(.*?)(\d\d[.]\d\d[.]\d\d\d\d)

и затем, если она совпадает, группа 2 будет первой доступной датой, а группа 1 будет материалом в строке перед ней.

Наконец, вы можете использовать любой язык, который вы используете, чтобы применить это несколько раз к строке, пока она не будет совпадать: таким образом, каждый раз, когда вы получите «материал до даты» в группе 1 и дату в группе 2.

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