Python Regex, чтобы найти строку с переменной в двойных кавычках - PullRequest
0 голосов
/ 26 июня 2019

Код в Python с использованием регулярных выражений, который может выполнять что-то вроде этого

Введите:

<script type="text/javascript">
(function(){var d=document.domain;while (true){try{var A=window.parent.document.domain;break;}catch(e)
 {};d=d.replace(/.*?(?:\.|$)/,'');if (d.length==0) break;try{document.domain=d;}catch (e){break;}}})();
window.parent.OnUploadCompleted(0,"/userfiles/abc.txt","abc.txt", "") ;</script>

с abc.txt - это переменная типа self.filename

Вывод только: /userfiles/abc.txt без abc.txt

Проблема в том, что userfiles тоже переменная.

Спасибо ./.

Ответы [ 2 ]

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

Предполагается:

1) То, что вы хотите, это всегда текстовый файл

2) Строка всегда path , которая содержит символ /

Должен работать следующий шаблон:

import re

INPUT = """<script type="text/javascript">
(function(){var d=document.domain;while (true){try{var A=window.parent.document.domain;break;}catch(e)
 {};d=d.replace(/.*?(?:\.|$)/,'');if (d.length==0) break;try{document.domain=d;}catch (e){break;}}})();
window.parent.OnUploadCompleted(0,"/userfiles/abc.txt","abc.txt", "") ;</script>"""

get_path = re.search(r"\"([^\"]*\/[^\"]*txt)\"",INPUT).group(1)

print(get_path)

Вывод:

/ userfiles / abc.txt

Ссылка дляссылка

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

Это выражение, вероятно, может работать здесь:

OnUploadCompleted\([0-9]+\s*,\s*\"\/(.+?)\"

, и наш желаемый результат находится в этой группе захвата (.+?).

Пожалуйста, ознакомьтесь с демонстрацией для получения дополнительных пояснений.

Тест

import re

regex = r"OnUploadCompleted\([0-9]+\s*,\s*\"\/(.+?)\""

test_str = ("<script type=\"text/javascript\">\n"
    "(function(){var d=document.domain;while (true){try{var A=window.parent.document.domain;break;}catch(e)\n"
    " {};d=d.replace(/.*?(?:\\.|$)/,'');if (d.length==0) break;try{document.domain=d;}catch (e){break;}}})();\n"
    "window.parent.OnUploadCompleted(0,\"/userfiles/abc.txt\",\"abc.txt\", \"\") ;</script>")

matches = re.finditer(regex, test_str, re.MULTILINE)

for matchNum, match in enumerate(matches, start=1):

    print ("Match {matchNum} was found at {start}-{end}: {match}".format(matchNum = matchNum, start = match.start(), end = match.end(), match = match.group()))

    for groupNum in range(0, len(match.groups())):
        groupNum = groupNum + 1

        print ("Group {groupNum} found at {start}-{end}: {group}".format(groupNum = groupNum, start = match.start(groupNum), end = match.end(groupNum), group = match.group(groupNum)))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...