Соответствие регулярному выражению: нечувствительные к регистру немецкие слова с пробелами (Python) - PullRequest
0 голосов
/ 05 марта 2020

У меня проблема с совпадением любого количества немецких слов в фигурных скобках [], игнорируя регистр. Выражение должно совпадать только с пробелами и словами, ничем иным, т.е. без знаков препинания или скобок. Например: выражение ['über das thema schreibt'] должно совпадать с ['Über', 'das', 'Thema', 'schreibt'] У меня есть один список с предметами первого порядка, а другой - со вторым порядком, при условии, что слова совпадают, они оба должны совпадать.

Код, который я пробовал: -

regex = re.findall('[(a-zA-Z_äöüÄÖÜß\s+)]', str(term))

или

re.findall('[(\S\s+)]', str(term))

Но они не работают. Пожалуйста, помогите мне найти решение

Ответы [ 4 ]

0 голосов
/ 05 марта 2020

Я нашел самое простое решение:

for a, b in zip(list1, list2):
    reg_a = re.findall('[(\w\s+)]', str(a).lower())
    reg_b = re.findall('[(\w\s+)]', str(b).lower())
    if reg_a == reg_b:
        return True
    else
        return False
0 голосов
/ 05 марта 2020

В простейшей форме использование \w+ работает для поиска слов (нужен флаг Unicode для символов, отличных от ascii), но, поскольку вы хотите, чтобы они были в квадратных скобках (и я предполагаю, что кавычки), вам нужно что-то немного complex

\[(['\"])((\w+\s?)+)\1\]

\[ и \] используются для соответствия квадратным скобкам
['\"] соответствует любой кавычке, а \1 гарантирует, что эта же кавычка находится на другом конце
\w+ захватывает 1 слово. \s? для дополнительного пространства.

Вся строка находится во второй группе, которую можно разделить, чтобы получить список

import re
text = "['über das thema schreibt']"
regex = re.compile("\[(['\"])((\w+\s?)+)['\"]\]", flags=re.U) 
match = regex.match(text)
if match:
    print(match.group(2).split())

(небольшое редактирование, поскольку \1, похоже, не работает в терминале для меня)

0 голосов
/ 05 марта 2020

Обновлено на основе комментариев, чтобы соответствовать каждому слову. Это просто игнорирует пробелы, одинарные кавычки и квадратные скобки

import re
text = "['über das thema schreibt']"
re.findall("([a-zA-Z_äöüÄÖÜß]+)", str(text))

# ['über', 'das', 'thema', 'schreibt']
0 голосов
/ 05 марта 2020

Если вы решаете проблему чувствительности к регистру, добавьте регулярное выражение flaf re.IGNORECASE вроде

re.findall('[(\S\s+)]', str(term),re.IGNORECASE)

Возможно, вам придется рассмотреть вопрос о преобразовании их в Unicode, если это не помогло.

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