Невозможно получить определенную строку на основе строки в Python - PullRequest
0 голосов
/ 19 марта 2019

file1.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",

Я читаю содержимое файла в переменную: message и хочу получить указанную строку:

Commit message: "Added parameter for jmeter for Jenkins

Я использую Python 2.7,Пожалуйста, предложите.я пытался использовать:

indexofGitMsgList = [gin for gin, item in enumerate(message) if re.search('^Commit Message', item)]
indexofGitMsg = max(indexofGitMsgList)
gitMsgList = message[indexofGitMsg]
print(gitMsgList)

Ответы [ 4 ]

0 голосов
/ 19 марта 2019

Для простоты, используйте 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 голосов
/ 19 марта 2019

Использование 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])

OUTPUT

Commit message: Added parameter for jmeter for Jenkins

EDIT

Чтобы сохранить сообщение в переменной:

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 голосов
/ 19 марта 2019

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

with open('test.txt', 'r') as f:
    message = []
    for line in f.readlines():
    if '"""' in line:
        message.append(line)
    print(message)
0 голосов
/ 19 марта 2019

Использование 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...