Невозможно получить определенную строку на основе строки в Python

Я, конечно, согласен с @Wogan выше, что использование CSV moudle - хороший подход. Сказав, что если вы все еще хотите попробовать регулярное выражение, попробуйте, но вам придется адаптировать его к диалекту Python

string.split(/,(?=(?:[^\"]*\"[^\"]*\")*(?![^\"]*\"))/)

HTH

-1
задан Petar Velev 19 March 2019 в 09:35
поделиться

4 ответа

Использование Regex -> Lookbehind & Lookahead.

Пример:

import re

message = '''" > git rev-parse refs/remotes/origin/master^{commit} # timeout=10",
            " > git rev-parse refs/remotes/origin/origin/master^{commit} # timeout=10",
            "Checking out Revision ff1b75913a79ffe7fc066bc962f74afa5e6f563a (refs/remotes/origin/master)",
            " > git config core.sparsecheckout # timeout=10",
          " > git checkout -f ff1b75913a79ffe7fc066bc962f74afa5e6f563a",
            " > git branch -a -v --no-abbrev # timeout=10",
            " > git checkout -b master ff1b75913a79ffe7fc066bc962f74afa5e6f563a",
            """Commit message: "Added parameter for jmeter for Jenkins"""",
            "[Pipeline] sh",
            "[petclinic] Running shell script",'''

m = re.search("(?<=Commit message:)(.*?)(?=,)", message)
if m:
    print(m.group(1).strip().strip('"'))

Выход:

Added parameter for jmeter for Jenkins
0
ответ дан Rakesh 19 March 2019 в 09:35
поделиться

Использование in для поиска str и replace(), чтобы избавиться от ":

list.txt:

" > git rev-parse refs/remotes/origin/master^{commit} # timeout=10",
" > git rev-parse refs/remotes/origin/origin/master^{commit} # timeout=10",
"Checking out Revision ff1b75913a79ffe7fc066bc962f74afa5e6f563a (refs/remotes/origin/master)",
" > git config core.sparsecheckout # timeout=10",
" > git checkout -f ff1b75913a79ffe7fc066bc962f74afa5e6f563a",
" > git branch -a -v --no-abbrev # timeout=10",
" > git checkout -b master ff1b75913a79ffe7fc066bc962f74afa5e6f563a",
"""Commit message: "Added parameter for jmeter for Jenkins"""",
"[Pipeline] sh",
"[petclinic] Running shell script",

Отсюда :

logFile = "list.txt"
with open(logFile) as f:
    content = f.readlines()
# you may also want to remove empty lines
content = [l.strip() for l in content if l.strip()]

searchStr = 'Commit message'

for line in content:
    if searchStr in line:
        print(line.replace('"', '')[:-1])

ВЫХОД :

Commit message: Added parameter for jmeter for Jenkins

РЕДАКТИРОВАТЬ :

Для сохранения сообщения в переменная:

searchStr = 'Commit message'
commitMsg = ''
for line in content:
    if searchStr in line:
        print(line.replace('"', '')[:-1])
        commitMsg = line.replace('"', '').split(": ")[1][:-1]

print(commitMsg)   # Added parameter for jmeter for Jenkins
0
ответ дан DirtyBit 19 March 2019 в 09:35
поделиться

Очень простым примером было бы проверить, содержит ли строка три двойные кавычки ("" ") и сохранить его в списке.

0
ответ дан 5parkp1ug 19 March 2019 в 09:35
поделиться

Для простоты используйте findall метод регулярных выражений из python:

import re
message = '''" > git rev-parse refs/remotes/origin/master^{commit} # 
    timeout=10",
        " > git rev-parse refs/remotes/origin/origin/master^{commit} # 
    timeout=10",
        "Checking out Revision ff1b75913a79ffe7fc066bc962f74afa5e6f563a 
    (refs/remotes/origin/master)",
        " > git config core.sparsecheckout # timeout=10",
      " > git checkout -f ff1b75913a79ffe7fc066bc962f74afa5e6f563a",
        " > git branch -a -v --no-abbrev # timeout=10",
        " > git checkout -b master 
    ff1b75913a79ffe7fc066bc962f74afa5e6f563a",
        """Commit message: "Added parameter for jmeter for Jenkins"""",
        "[Pipeline] sh",
        "[petclinic] Running shell script",'''


m=(re.findall("Commit message:\s.+[a-zA-Z]+",message))
for i in m:
   print(i)

Вывод

Commit message: "Added parameter for jmeter for Jenkins
0
ответ дан Heikki 19 March 2019 в 09:35
поделиться
Другие вопросы по тегам:

Похожие вопросы: