регулярное выражение pandas с несколькими потенциальными образцами - PullRequest
1 голос
/ 27 февраля 2020

У меня есть:

blah blah blah (3383-HK) - blah blah blah
blah blah blah (A-US) - blah blah blah
blah blah blah (blah) (3383-HK) - blah blah blah
blah blah blah (A.CC-US) - blah blah blah

Я хочу извлечь биржевую бирку из каждой строки.

(3383-HK
(A-US
(3383-HK
(A.CC-US

Формат биржевой биржи:

  • заключенный в квадратные скобки
  • имеет формат XXX-XXX или XXX.XXX-XXX, где XXX - это буквенные символы c символов длиной от 1 до 20 символов в каждом разделе

В настоящее время я использую:

df['ticker_region']=df['filename'].str.extract(r"(\(\w{1,20}-\w{1,20})")

и он возвращает:

(3383-HK
(3383-HK
(A.CC-US

, но НЕ: (A. CC -US

Есть ли рекомендуемый способ также извлечь последний?

Я пытался:

df['ticker_region']=df['filename'].str.extract(r"(\(\w{1,20}\.?\w{1,10}?-\w{1,20})")

, но он не работает, так как он не захватывает:

(A-US

мой полный скрипт :

df=pd.DataFrame({'filename':[    "blah blah blah (3383-HK) - blah blah blah",
    "blah blah blah (A-US) - blah blah blah",
    "blah blah blah (blah) (3383-HK) - blah blah blah",
    "blah blah blah (A.CC-US) - blah blah blah"]})
df['ticker_region']=df['filename'].str.extract(r"(\(\w{1,20}\.?\w{1,10}?-\w{1,20})") # search for (XXXXXXX-XXXXX
df['ticker_region2']=df['filename'].str.extract(r"(\(\w{1,20}.{1,20}?-\w{1,20})") # search for (XXXXXXX-XXXXX
df['ticker_region3']=df['filename'].str.extract(r"(\(\w{1,20}-\w{1,20})") # search for (XXXXXXX-XXXXX

df

Ответы [ 2 ]

2 голосов
/ 27 февраля 2020

Вы можете использовать

\(((?=[\w.]{1,20}-)\w+(?:\.\w+)?-\w{1,20})\)

См. Демоверсию regex

Подробности

  • \( - ( char
  • ((?=[\w.]{1,20}-)\w+(?:\.\w+)?-\w{1,20}) - Группа 1 (возвращается Series.str.extract):
    • (?=[\w.]{1,20}-) - должно быть от 1 до 20 слов или . символов, а затем - непосредственно справа от текущего местоположения
    • \w+ - 1+ слов символов
    • (?:\.\w+)? необязательная последовательность . и 1+ слов символов
    • - - - символ
    • \w{1,20} - символы от 1 до 20 слов
  • \) - ) символ
0 голосов
/ 27 февраля 2020
df.A.str.extract(r'\(([\w\.?]+-.*)\)')

Выход

          0
0   3383-HK
1   A-US
2   3383-HK
3   A.CC-US
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...