RegEx для извлечения всех символов между специальным символом и словом - PullRequest
0 голосов
/ 28 апреля 2019

Я пытаюсь извлечь все символы (обычно несколько слов, включая пробел) между специальным символом > и шаблоном слова .myword. в моем панде dataframe.

Я пробовал следующее, которое приносит только одно слово, прикрепленное к .myword:

df['my_column'] = df['text'].str.findall(r'(\w+.myword)')

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

str1 = 123abc >I want this1.myword #extract I want this1.myword
str2 =  123<>I want this2.myword<> #extract I want this2.myword  

Ответы [ 3 ]

3 голосов
/ 28 апреля 2019

Во-первых, простая точка . соответствует любому символу, поэтому вы хотите экранировать его в своем регулярном выражении: \. В противном случае регулярное выражение также найдет совпадение, например:
123>Iwantthis!myword # extracts Iwantthis!myword

Во-вторых, вы должны разрешить использование пробельных символов в захваченной группе: \s.

Полагаю, это должно сработать за вас: r'([\w\s]+\.myword)'

2 голосов
/ 28 апреля 2019

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

код

def substring(original_string):
    start = original_string.find(">")
    end = original_string.find(".myword")

    if (start > -1) and (end > -1):
        return original_string[start + 1:end]
    else:
        return None


df['my_column'] = df['text'].apply(lambda x: substring(x))
1 голос
/ 28 апреля 2019
$ grep -Po '(?<=>)[^<$]+' <<EOF
123abc >I want this1.myword
123<>I want this2.myword<>
EOF

I want this1.myword
I want this2.myword
  • (?<=) Позитивный взгляд за спиной
  • [^] Отрицательный набор символов
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...