Поиск регулярных выражений не может получить строку из объекта соответствия при использовании в цикле for.
row_values = result_script_name.split('^')
for row in row_values:
table_name = re.search(r"(?<=')(.*)(?=')", row).group(0)
AttributeError: 'NoneType' object has no attribute 'group'
Но тот же самый шаблон регулярного выражения отлично находит строку при использовании вне цикла.
table_name = re.search(r"(?<=')(.*)(?=')", row_values[0]).group(0)
Строка, которую я хотел, состояла в том, чтобы получить «время жизни» из строки ниже
^WORKFLOW_NAME='lifetime'
Я считаю, что происходит то, что некоторые строки вообще не совпадают, и поэтому вы пытаетесь получить доступ к группе захвата (в данном случае нулевой), которая даже не существует. Вот шаблон, который вы должны использовать:
input = "^WORKFLOW_NAME='lifetime'"
match = re.search(r"(?<=')(.*)(?=')", input)
if match:
print(match.group(0))
То есть вы должны сначала проверить, был ли вызов search
успешным, и только потом печатать. Я не знаю точно, что должен делать ваш цикл, но вы можете достаточно легко адаптировать приведенный выше скрипт к своим потребностям.
Здесь мы можем упростить наше выражение, возможно, до чего-то похожего на:
.+?'(.+?)'
где наши данные сохраняются в группе захвата \\1
# coding=utf8
# the above tag defines encoding for this document and is for Python 2.x compatibility
import re
regex = r".+'(.+?)'"
test_str = "^WORKFLOW_NAME='lifetime'"
subst = "\\1"
# 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.
Если это выражение не нужно, его можно изменить или изменить в regex101.com.
jex.im визуализирует регулярные выражения:
const regex = /.+?'(.+?)'/gm;
const str = `^WORKFLOW_NAME='lifetime'
WORKFLOW_NAME='Any other data that we want'
WORKFLOW_NAME='Any other data that we want'`;
const subst = `$1`;
// The substituted value will be contained in the result variable
const result = str.replace(regex, subst);
console.info('Substitution result: ', result);
С новым оператором
walrus
(Python >= 3.8) вы, наконец, можете делать что-то. какif (match := re.search(...)) is not None:
. Ура! (Ну, уPHP
это было примерно с 1990 года...).