Код регулярного выражения, Python-2 alphanumeric [duplicate]

§12.2 / 5 говорит & ldquo; Второй контекст [когда время жизни временного расширено] - это когда ссылка привязана к временному. & rdquo; Взято буквально, это ясно говорит о том, что срок жизни должен быть расширен в вашем случае; ваш B :: a , безусловно, связан с временным. (Ссылка привязывается к объекту, и я не вижу другого объекта, к которому он мог бы привязываться). Однако это очень плохая формулировка; Я уверен, что подразумевается & ldquo; Второй контекст - это когда используется временное значение для инициализации ссылки, & rdquo; , а расширенное время жизни соответствует значению ссылки, инициализированной выражением rvalue временное, а не любое из других ссылок, которые впоследствии могут быть связаны с объектом. В соответствии с этим формулировка требует чего-то, что просто не реализуемо: рассмотрите:

  void f (A const & amp; a) {static A const & amp;  localA = a;  }  

с:

  f (A ());   

Где должен компилятор поставить A () (учитывая, что он вообще не может видеть код f () и doesn '

Я думаю, что это стоит DR.

Могу добавить, что есть текст, который настоятельно предлагает, чтобы мой интерпретация намерения верна. Представьте, что у вас был второй конструктор для B :

  B :: B (): a (A ()) {}  

В этом случае B :: a будет непосредственно инициализироваться временным; время жизни этого временного должно быть расширено даже по моей интерпретации. Тем не менее, стандарт делает конкретное исключение для этого случая; такое временное действие сохраняется только до тех пор, пока конструктор не выйдет (что снова оставит вас с обвисшей ссылкой). Это исключение дает очень сильное указание на то, что авторы стандарта не намеревались ссылаться на ссылки на члены в классе, чтобы продлить время жизни любых временных связей, к которым они привязаны; опять же, мотивация - это реализуемость. Представьте себе, что вместо

  B b ((A ()));   

вы написали:

  B * b = new B (A ());   

Где должен компилятор помещать временный A () так, чтобы это было время жизни для динамически выделенного B ?

2
задан user3842077 15 July 2014 в 19:48
поделиться

1 ответ

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

\b((?:[a-z]+\S*\d+|\d\S*[a-z]+)[a-z\d_-]*)\b

Объяснение:

\b                   # Assert position at a word boundary
(                    # Beginning of capturing group 1
  (?:                # Beginning of the non-capturing group
    [a-z]+\S*\d+     # Match letters followed by numbers
    |                # OR
    \d+\S*[a-z]+     # Match numbers followed by letters
  )                  # End of the group
  [a-z\d_-]*         # Match letter, digit, '_', or '-' 0 or more times
)                    # End of capturing group 1
\b                   # Assert position at a word boundary

Regex101 Demo

4
ответ дан Amal Murali 16 August 2018 в 04:19
поделиться
  • 1
    Спасибо, но это также захватывает слова и числа, я хочу только строки, которые не все буквы и все цифры. – user3842077 15 July 2014 в 19:16
  • 2
    @ user3842077: Просто мы поняли: можете ли вы обновить свой вопрос, чтобы включить некоторые примеры строк, которые вы не хотите сопоставить? – Amal Murali 15 July 2014 в 19:19
  • 3
    Я обновил его соответственно - извините за путаницу! – user3842077 15 July 2014 в 19:21
  • 4
    @ user3842077: Не беспокойтесь. Я обновил ответ. – Amal Murali 15 July 2014 в 19:33
  • 5
    @ user3842077: К сожалению, извините! Я забыл обновить демо-ссылку. Он обновлен. Проверь сейчас. – Amal Murali 15 July 2014 в 19:41
Другие вопросы по тегам:

Похожие вопросы: