Вы одновременно отметили свой вопрос [C] и [C ++]. Результаты будут согласованы между языками, но структура ответа различна для каждого из этих языков.
На языке C ваши примеры не имеют никакого отношения к bool
вообще (что относится к C99 as Что ж). В языке C реляционные операторы не дают результатов bool
. И 4 > 5
, и 4 < 5
являются выражениями, которые дают результаты типа int
со значениями 0
или 1
. Таким образом, в ваших примерах нет никакого преобразования «bool to int» в ваших примерах в C.
. В C ++ реляционные операторы действительно дают результаты bool
. Значения bool
конвертируются в тип int
, при этом true
преобразуется в 1
и false
преобразование в 0
. Это гарантируется языком.
P.S. Язык C также имеет выделенный логический тип _Bool
(с макроснимками как bool
), а его интегральные правила преобразования по существу те же, что и в C ++. Но тем не менее это не относится к вашим конкретным примерам в C. Еще раз, реляционные операторы в C всегда вызывают результаты int
(not bool
) независимо от версии спецификации языка.
Тебе не хватает пропусков. После символа #
, до <
и после >
.
Таким образом, можно добавить недостающие совпадения пробелов:
>>> m = re.match(r"\s*\#?\s*\w*\s*(\<)+\s*(?P<method>\w+)\s*(\>)+\s*\w*", "# This <foo> truc")
>>> m.group('method')
'foo'
Однако, если вам нужно только значение между <
и >
, тогда используйте re.search
вместо Вы можете просто значительно улучшить свое регулярное выражение:
>>> r = re.search(r"\<(?P<method>[^\>]*)\>", "# This <foo> truc")
>>> r.group('method')
'foo'
Вам нужно изменить свое регулярное выражение, чтобы включить дополнительные пробелы перед This
и <
, тогда вы можете использовать атрибут groups
:
some_match = re.match(r"\s*\#?\s*\w*\s*(\<)+\s*(?P<method>\w+)\s*(\>)+\w*", "# This <foo> truc")
some_match.groups()
('<', 'foo', '>')
some_match.groups(1)
'foo'