регулярное выражение. групповой фронт и фамилия от Pathstring с Python - PullRequest
0 голосов
/ 25 апреля 2020

Мне нужно извлечь имена из следующих строк (имя_папки). Я превратил их в необработанные нити. некоторые примеры:

'.\\\\Jens, Jensen\\\\Rechnungen\\\\Rechnungen 2020\\\\somefoldername'
'.\\Harald, Hardraala\\Rechnungen 2017'
'.\\A - H\\Johan, Johanson\\Rechnungen 2017'
'.\\\\Jens-Haudraf, Johan\\\\Rechnungen\\\\Rechnungen 2020\\\\anotherfoldername'
'.\\A - H\\Funke, Felix'

Я хочу, чтобы имена были в одной группе. Я не могу это сделать. Это то, что я придумал

r'\\*(\w*\-{0,1},{0,1} {0,1}\w*)'

Большое спасибо за любые мысли.

Ответы [ 2 ]

0 голосов
/ 25 апреля 2020

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

Значение находится в первой группе захвата.

Шаблон

\\(\w+(?:-\w+)?, \w+)

В части

  • \\ Матч \
  • ( Захват группа 1
    • \w+(?:-\w+)? Матч 1+ словосочетания с необязательными - и 1+ словосочетаниями
    • , \w+ Совпадение с запятой, пробелом и 1+ словосочетаниями
  • ) Закрыть группу 1

Regex demo | Python демо

Пример кода

import re

regex = r"\\(\w+(?:-\w+)?, \w+)"
strings = [
    '.\\\\Jens, Jensen\\\\Rechnungen\\\\Rechnungen 2020\\\\somefoldername',
    '.\\Harald, Hardraala\\Rechnungen 2017',
    '.\\A - H\\Johan, Johanson\\Rechnungen 2017',
    '.\\\\Jens-Haudraf, Johan\\\\Rechnungen\\\\Rechnungen 2020\\\\anotherfoldername',
    '.\\A - H\\Funke, Felix'
]

for s in strings:
    matches = re.search(regex, s)
    if matches:
        print(matches.group(1))

Выход

Jens, Jensen
Harald, Hardraala
Johan, Johanson
Jens-Haudraf, Johan
Funke, Felix
0 голосов
/ 25 апреля 2020

Следующий код извлечет имена, предполагая, что формат остается прежним, т.е. одно имя слова (возможно, с дефисом) + запятая + другое имя одного слова (возможно, с дефисом).

import re
strings = ['.\\\\Jens, Jensen\\\\Rechnungen\\\\Rechnungen 2020\\\\somefoldername',
'.\\Harald, Hardraala\\Rechnungen 2017',
'.\\A - H\\Johan, Johanson\\Rechnungen 2017',
'.\\\\Jens-Haudraf, Johan\\\\Rechnungen\\\\Rechnungen 2020\\\\anotherfoldername',
'.\\A - H\\Funke, Felix']

matches = [ re.search("[\w-]+, [\w-]+",s).group() for s in strings ]

print(matches)
>>>
['Jens, Jensen', 'Harald, Hardraala', 'Johan, Johanson', 'Jens-Haudraf, Johan', 'Funke, Felix']
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...