Как использовать join и regex? - PullRequest
0 голосов
/ 26 января 2019

Я пытаюсь добавить \ n после кавычки (") и пробела.

Самое близкое, что я мог найти, это re.sub, однако он удаляет определенные символы.

line = 'Type: "SecurityIncident" RowID: "FB013B06-B04C-4FEB-A5A5-3B858F910F29"'
q = re.sub(r'[\d\w]" ', '\n', line)
print(q)

Выход:

Тип: «SecurityInciden \ nRowID:» FB013B06-B04C-4FEB-A5A5-3B858F910F2 \ n

В поисках решения без удаления какого-либо символа.

Ответы [ 3 ]

0 голосов
/ 26 января 2019

Ваша попытка регулярного выражения [\d\w]" почти в порядке, но имеет некоторые небольшие недостатки.Вам не нужно писать \d с \w в наборе символов, поскольку это избыточно, поскольку \w уже содержит \d в нем.Поскольку одного \w достаточно для представления алфавита, цифры или подчеркивания, следовательно, нет необходимости заключать его в набор символов [], поэтому вы можете просто написать \w, и ваше обновленное регулярное выражение станет \w".

Но теперь, если вы сопоставите это регулярное выражение и замените его \n, оно будет соответствовать буквальному алфавиту t, затем " и пробелу, и оно будет заменено \n, поэтому вы получаете этот вывод

SecurityInciden\nRowID

Вам нужно захватить совпавшую строку в group1, и при замене вы должны использовать ее при замене, чтобы не заменить, следовательно, вы должны использовать \1\n вместо вместо \n

Попробуйте это обновленное регулярное выражение,

(\w" )

и замените его на \1\n

Demo1

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

(\w") 
     ^ space here

Демо2

Вот пример кода Python,

import re

line = 'Type: "SecurityIncident" RowID: "FB013B06-B04C-4FEB-A5A5-3B858F910F29"'
q = re.sub(r'(\w") ', r'\1\n', line)
print(q)

Выход,

Type: "SecurityIncident"
RowID: "FB013B06-B04C-4FEB-A5A5-3B858F910F29"
0 голосов
/ 26 января 2019

В своем регулярном выражении вы удаляете t из инцидента, потому что вы соответствуете ему и не используете его в замене.

Еще один вариант получения результата - разделение на двойные кавычки с последующим пробеломкогда перед ним стоит символ слова с использованием положительного lookbehind .

Затем объедините результат вместе, используя новую строку.

(?<=\w)" 

Regex demo | Python demo

Например:

import re
line = 'Type: "SecurityIncident" RowID: "FB013B06-B04C-4FEB-A5A5-3B858F910F29"'
print("\n".join(re.split(r'(?<=\w)" ', line)))

Результат

Type: "SecurityIncident
RowID: "FB013B06-B04C-4FEB-A5A5-3B858F910F29"
0 голосов
/ 26 января 2019

Попробуйте это:

import re
line = 'Type: "SecurityIncident" RowID: "FB013B06-B04C-4FEB-A5A5-3B858F910F29"'
pattern = re.compile('(\w+): (".+?"\s?)', re.IGNORECASE)
q = re.sub(pattern, r'\g<1>: \g<2>\n', line)
print(repr(q))

Это должно дать вам следующие результаты:

Тип: «SecurityIncident» \ nRowID: "FB013B06-B04C-4FEB-A5A5-3B858F910F29" \ п

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