Номер регулярного выражения с последующей датой без пробела

1

У меня есть следующие строки:

fact prof 45883
factura PROF 46186
FACT.PROF:45126
FACT.PROF.NR.46069
FACTURA PROF. 46296
factura prof.46673
FAC PROFORMA PROF 46876
FACT 44046
FACT 46529
fact proforma nr 46229
FCT PROF:40365
PROF 44283
fact prof 46646
FACT PROF: 45666
fact PROF:45560
Factura proforma : 46059
FCT PROF 45108
fact. proforma nr.46180
FACTURA PROFORMA NR 43864 SI FACTURA PROFORMA NR 43865
PROF 46471
prof nr 42840
PROF. NR.45830
FAC. PROFORMA NR. 46373
fact prof 38518
f prof 45983
factura proforma 46753
factura  prof 46326
f prof 46645
f prof 43723
fact prof.nr 46227
factura proforma 41292
prof 45602
F.45026
FAC. PROFORMA: 43017
FACT 43198
FACT PROF 46284
fact proforma nr 45984
fact prof 46656
fact. nr. 45224
fact PROF:46282
prof 45826
PROFORMA 42801
fact prof 45579
FF 46105
FACTURA PROF 45237
factura proforma 43335
fact nr 43709
FACTURA PROF:46962
Seria PRO nr. 43712
SERIA PRO NR : 43099 
PROF 45515
Factura PROF : 45722
PROFORMA Seria PRO nr. 43051
PROF46215
PROF 45131
PROF460798wheels
proforma 43736
proforma 43642 si 38987
Factura 46690
Fproforma 416477
PROF   45608
factura numar 42995
PROF :43679
PROF:46801
Prof45066
PROF: 45613
Factura 45369
prof 46791
PROF 45198
prof 39970
Prof. 46039
Seria PROF NR 45273
fact. proforma 46446
PROF 46911
prof 45044
PROF: 45674
Proforma 46241
PROF: 43943
prof 43769
prof46611
PROFORMA NR 46635
prof. nr. 45597
PROF42088
FACTURA 44235
PROF 46024 SI 46156
proforma 46219
PROFORMA nr. 4712619.05.2015
Proforma 46333 
PROF  44961
PROF 43941
Prof:45303
prof44895
FACTURA 45199
proforma 46263/12.05.15 
PRPROF:46717

Мне нужно извлечь числа из соответствующих строк. Я создал Reg-ex, который охватывает почти все случаи, но у меня есть 2 случая, которые я не могу покрыть:

  1. Первый из них - PROF460798, где число объединяется с именем фирмы (8wheels)

  2. А вторая - PROFORMA nr. 4712619.05.2015, где число объединяется с датой.

Есть ли способ исключить эти строки или получить правильные цифры?

Это мое регулярное выражение до сих пор:

(?:prof|proforma|F|fact|PRO|factura)\s?\.?\s?(?:nr|numar)?\.?\s?:?\s?(\d+(?!\d\d\.\d{2}\.\d{4}))\s?(?:si)?\s?(\d+)?

Некоторые полнотекстовые примеры:

Decontare -Platitor: COLCERIU LAURA-ELENA; RO20OTPV112004321192RO01-Beneficiar: SC DUMMY SRL; RO96RNCB0040124547320001; CODFISC 16296240-Detalii: /ROC/Fproforma 416477 din 14.05.15//RFB/16
Decontare -Platitor: Aliman Samuel-lucian; RO61INGB2220999904092615-Beneficiar: DUMMY; RO96RNCB4090124247370001-Detalii: /ROC/PROF:46634/RFB/NONE.
Decontare -Platitor: VLAD CAMBURU; RO61INGB2220999904092615-Beneficiar: DUMMY; RO61INGB2220999904092615-Detalii: /ROC/Factura PROF:43751vlad camburu//RFB/1
Decontare -Platitor: CARP COSMIN; RO20OTPV112004321192RO01; CODFISC NA-Beneficiar: DUMMY; RO20OTPV112004323192RO01; CODFISC NA-Detalii: /ROC/PROF:46583                         Abonament servicii sportive dummy  Partener (65676301) 04/05   03/08
  • 0
    Возможно, было бы чище очистить строки регистра в первом проходе, а не пытаться создать регулярное выражение, соответствующее такому искаженному вводу.
Теги:
regex-negation

2 ответа

3
Лучший ответ

Если вам нужны только номера, вы можете использовать следующий Reg-ex:

/\d+\/\d+\.\d+\.\d+|\d+\.\d+\.\d+|\d+/g

Пример:

https://regex101.com/r/bA6vN4/1

РЕДАКТИРОВАТЬ

Поэтому, видимо, вам нужны только первые 5 цифр номера, а не целая строка:

/\d{5}/g

https://regex101.com/r/bA6vN4/2

РЕДАКТИРОВАТЬ

Это нужно сделать, он удаляет дату из числа, когда они находятся рядом друг с другом, и принимает во внимание ваш специальный случай с 8wheels:

/(?:proforma|PROFORMA|Proforma|factura|FACTURA|Factura|nr|NR|numar|NUMAR|prof|Prof|PROF|fact|FACT|fac|FAC|FCT|si|SI|F)(?:\s?|\.?|:?)*(\d+(?=8wheels|(?:(\d{2}\.\d{2}\.\d{4})))|\d+)/gm

https://regex101.com/r/fJ3sN6/4

  • 0
    Строка больше и содержит другие числа. Вот почему нужны идентификаторы, а ваше решение не решает 2 моих проблем.
  • 0
    так как цифры кажутся всегда пятью, и они всегда начинаются слева, похоже, что решение хорошо, если постобработка с помощью substr ()
Показать ещё 5 комментариев
0
(?:prof|proforma|F|fact|PRO|factura)\s*\.?\s*(?:nr|numar)?\.?\s?:?\s?(\d+(?=(?:\d\d\.\d{2}\.\d{4})|\s*$|[a-z]+))

Вы можете попробовать это. Смотрите демоверсию.

https://regex101.com/r/nM7nT5/8

  • 0
    Это выражение не распространяется на случаи: проформа 43642 и 38987, проформа 46263 / 12.05.15 и колеса PROF460798
  • 0
    @neko в каких случаях?
Показать ещё 4 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню