Как извлечь аргументы с помощью регулярных выражений? - PullRequest
0 голосов
/ 26 мая 2019

Я хочу извлечь аргументы (тип аргументов командной строки) с помощью регулярных выражений. Здесь я возьму строку в качестве входных данных и получу аргументы в виде групп

В основном я хочу, чтобы набор в регулярных выражениях как исключал, так и включал некоторые символы.

import re

ppatt=r"( --(?P<param>([^( --)]*)))"
a=[x.group("param") for x in re.finditer(ppatt,"command --m=psrmcc;ld -  --kkk gtodf --klfj")]
print(a)

Я хочу, чтобы вывод был

['m=psrmcc;ld - ', 'kkk gtodf', 'klfj']

но вывод

['m=psrmcc;ld', 'kkk', 'klfj']

Ответы [ 2 ]

0 голосов
/ 26 мая 2019

Мы могли бы решить эту проблему, используя список символов с границами слов, возможно, с выражением, похожим на:

(?:.+?)(\b[A-Za-z=;\s]+\b)

Если мы хотим иметь больше символов, мы добавим их к:

[A-Za-z=;\s]

Здесь мы не собираем нежелательные символы с помощью группы без захвата:

(?:.+?)

затем мы собираем желаемые символы, заключенные в группу захвата, которую мы можем просто назвать, используя $1:

(\b[A-Za-z=;\s]+\b)

Test

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

import re

regex = r"(?:.+?)(\b[A-Za-z=;\s]+\b)"

test_str = "command --m=psrmcc;ld -  --kkk gtodf --klfj"

subst = "\\1\\n"

# 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

DEMO

0 голосов
/ 26 мая 2019

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

Пример:

import re

print(re.split(r"--", "command --m=psrmcc;ld -  --kkk gtodf --klfj")[1:])
#or
print("command --m=psrmcc;ld -  --kkk gtodf --klfj".split("--")[1:])

Выход:

['m=psrmcc;ld -  ', 'kkk gtodf ', 'klfj']
...