Проблема регулярных выражений в Python - PullRequest
0 голосов
/ 13 апреля 2010

Мне нужно извлечь части строки с помощью регулярных выражений в Python.

У меня все хорошо с базовым регулярным выражением, но я ужасен в обходах. Я показал два примера записей ниже. Последний большой всегда является валютным полем, например в первом это 4,76. Во втором это 2,00. Второй имеет номер счета, который является шаблоном \ d {6} - \ d {6}. Все, что после этого является валютой.

24.02 24.02VALINTATALO MEGAHERTSI4,76-
24.02 24.02DOE MRIDANG 157235-1234582,00-

Не могли бы вы помочь мне с этим регулярным выражением? То, что я написал до сих пор, дано ниже, но в нем все, что стоит после «тире» в номере счета, является валютой.

.*?(\d\d\.\d\d)(.*?)\s*(?<!\d{6}-\d{6})(\d*,\d\d)

Заранее спасибо

Ответы [ 4 ]

1 голос
/ 13 апреля 2010

Это похоже на работу:

.*?(\d\d\.\d\d)(.*?)(?:\d{6}-\d{6})?(\d*,\d\d)

Объяснение: (?: \ D {6} - \ d {6}) видит номер счета, но не запоминает его. Знак вопроса после него позволяет отсутствовать номеру счета. Причина, по которой мы не хотим запоминать номер счета, заключается в том, что он отбрасывает индекс, к которому мы получаем доступ с помощью match.group (3). То есть, это может быть в индексе 4, если номер счета присутствовал.

1 голос
/ 13 апреля 2010
import re

def extract_current(s):
    s = s[s.rfind(' ')+1:-1]
    s = re.sub('\d{6}-\d{6}', '', s)
    s = re.sub('[A-Z]+', '', s)
    return s

print extract_current('24.02 24.02VALINTATALO MEGAHERTSI4,76-')
print extract_current('24.02 24.02DOE MRIDANG 157235-1234582,00-')

Выход:

4,76
2,00
0 голосов
/ 13 апреля 2010
(?<=\d{6}-\d{6}|[A-Z ])[0-9,]+(?=-$)

Это регулярное выражение соответствует первой строке цифр и запятых, которой предшествует либо номер счета, либо буква, либо пробел, и после него ставится тире, который является последним символом строки / строки.

0 голосов
/ 13 апреля 2010
(?<=\b\d{6}-\d{6}|[^-\d])\d+?,\d\d

будет соответствовать "валюте", которой предшествует номер счета или что-либо еще (кроме дефиса). Этого достаточно?

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