2015-01-05 3 views
0

Я пробовал некоторые возможности lookahead, чтобы найти шаблон внутри строки, но я застрял здесь, поскольку мне нужно проверить несколько условий.Regex найти несколько совпадений

У меня есть строка, как

string = ''' i was behind the bars for (5.75) years ''' 
string2 = ''' I travelled for 6 months in Switzerland and some years say 5.2 in England ''' 
re.search(r'(?=\byears\b)([/d]+\S+)',str,re.I) 

Это я попытался даты получить после лет; /S+ используется для получения 5.33, 5.44 и т. Д., Так как после комбинации цифр будет пробел.

Я хочу, чтобы регулярное выражение соответствовало любой комбинации цифр, например 5.75, 10.25 и т. Д., Даже если оно заключено в скобки или кавычки. Но мне нужны только цифры. Это может быть до слова «годы» или после него. Каким будет лучший способ использовать регулярное выражение в Python для проверки множества возможностей?

+4

Каковы возможности, которые вы пробовали, и как они были недостаточными? –

+0

Просто подождите, я отправлю его как комментарий. – user3116355

+1

Поместите его ** в свой вопрос **, а также ожидаемый ввод и вывод –

ответ

1

Это может сработать.

Update

Вы получаете сообщение об ошибке 'недопустимое выражение'.
Я не вижу ничего недействительного, если python не поддерживает модификаторы в группах кластеров.
Вы можете попытаться извлечь модификатор case и добавить его в часть параметров в функции регулярного выражения.

Попробуйте тогда:

(?:\b(\d+(?:\.\d*)?|\.\d+)\b.*?(?:(?:\r?\n).*?){0,2}\byears?\b|\byears?\b.*?(?:(?:\r?\n).*?){0,2}\b(\d+(?:\.\d*)?|\.\d+)\b) 

Оригинал:

# (?i:\b(\d+(?:\.\d*)?|\.\d+)\b.*?(?:(?:\r?\n).*?){0,2}\byears?\b|\byears?\b.*?(?:(?:\r?\n).*?){0,2}\b(\d+(?:\.\d*)?|\.\d+)\b) 

(?i: 
     \b 
     (       # (1 start), Digits 
      \d+ 
      (?: \. \d*)? 
     | \. \d+ 
    )        # (1 end) 
     \b 
     .*? 
     (?:       # 0, 1 or 2 lines 
      (?: \r? \n) 
      .*? 
    ){0,2} 
     \b years? \b     # Followed by "year(s)" 

    |        # or -- 

     \b years? \b     # "year(s)" 
     .*? 
     (?:       # 0, 1 or 2 lines 
      (?: \r? \n) 
      .*? 
    ){0,2} 
     \b 
     (       # (2 start), Followed by Digits 
      \d+ 
      (?: \. \d*)? 
     | \. \d+ 
    )        # (2 end) 
     \b 
) 
+0

@sin - Спасибо человеку. это не работает. Но я делаю некоторые изменения, и если он работает нормально, я опубликую ответ здесь. – user3116355

+0

@sin - Я отредактировал ответ с ошибкой, с которой я столкнулся. – user3116355

+0

'Неверное выражение', но не говорит где. Я обновил его, чтобы вынуть нечувствительный к регистру модификатор, посмотрите, работает ли это. – sln

Смежные вопросы