Regex для разделения строки в Python 3.7 - PullRequest
2 голосов
/ 13 июня 2019

Я пытаюсь разделить последовательность нерегулярных строк, которые я читаю в программе на Python, из файлов Excel. Я использую Regex101.com для тестирования, и мне частично это удалось:
Мой образец:

Barber #1-1 Daily Prod. - Pumping unit  
Barbee #1-3 Daily Prod. - Plunger Lift  
Barbee #1-5 Daily Prod. = Coil Tubing  
Barbee #1-3 Daily Prod. - Plunger  
Barbee #1-5 Daily Prod.w/ coil tubing  
Porter GU #1 Well #2 Daily Prod.  
Barber GU #1 Well #1 Daily Prod.  
Bogel #1-2 Daily Prod. w/ plunger  

Мое регулярное выражение:
(.*)\sDaily Prod\.(.*$)

Я получаю этот ответ, выберите group1 и group2:

Barber #1-1 - Pumping unit  
Barbee #1-3 - Plunger Lift  
Barbee #1-5 = Coil Tubing  
Barbee #1-3 - Plunger  
Barbee #1-5w/ coil tubing  
Porter GU #1 Well #2  
Barber GU #1 Well #1  
Bogel #1-2 w/ plunger  

и я хотел бы иметь:

Barber #1-1 Pumping unit  
Barbee #1-3 Plunger Lift  
Barbee #1-5 Coil Tubing  
Barbee #1-3 Plunger  
Barbee #1-5 coil tubing  
Porter GU #1 Well #2  
Barber GU #1 Well #1  
Bogel #1-2 plunger  

Спасибо.

Ответы [ 2 ]

1 голос
/ 13 июня 2019

Я предполагаю, что это выражение может сработать:

(.*)\sDaily Prod\.(\s*[-=w\/]+\s*)?(.*)

Здесь у нас есть необязательная группа:

(\s*[-=w\/]+\s*)?

, которые мы собираем наши нежелательные символы и пробелы, затем мы делаем замену с $ 1 и $ 3.

Демо

Тест

# coding=utf8
# the above tag defines encoding for this document and is for Python 2.x compatibility

import re

regex = r"(.*)\sDaily Prod\.(\s*[-=w\/]+\s*)?(.*)"

test_str = ("Barber #1-1 Daily Prod. - Pumping unit\n"
    "Barbee #1-3 Daily Prod. - Plunger Lift\n"
    "Barbee #1-5 Daily Prod. = Coil Tubing\n"
    "Barbee #1-3 Daily Prod. - Plunger\n"
    "Barbee #1-5 Daily Prod.w/ coil tubing\n"
    "Porter GU #1 Well #2 Daily Prod.\n"
    "Barber GU #1 Well #1 Daily Prod.\n"
    "Bogel #1-2 Daily Prod. w/ plunger")

subst = "\\1 \\3"

# You can manually specify the number of replacements by changing the 4th argument
result = re.sub(regex, subst, test_str, 0, re.MULTILINE)

if result:
    print (result)

# Note: for Python 2.7 compatibility, use ur"" to prefix the regex and u"" to prefix the test string and substitution.

RegEx Circuit

jex.im визуализирует регулярные выражения:

enter image description here

0 голосов
/ 13 июня 2019

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

\sDaily Prod\.(?:\s*(?:[-=]|w/))?

Объяснение

  • \sDaily Prod\. Соответствует символу пробела, Daily Prod и точке
  • (?: Группа без захвата
    • \s* Совпадение с 0+ пробелами
    • (?: Группа без захвата
      • [-=] Совпадение - или =
      • | или
      • w/ Совпадение буквально
    • ) Закрыть группу без захвата
  • )? Закрыть группу без захвата и сделать ее необязательной

Regex demo

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