Разделите строку пробелами, за исключением подстроки, присутствующей внутри квадратной скобки - Python [duplicate]

Какую аутентификацию вы используете? Если это проверка подлинности форм, то в лучшем случае вам нужно будет найти файл cookie .ASPXAUTH и передать его в запросе WebClient .

В худшем случае это не сработает.

3
задан That Umbrella Guy 10 March 2012 в 09:37
поделиться

3 ответа

Это регулярное выражение должно работать для вас \s+(?=[^()]*(?:\(|$))

result = re.split(r"\s+(?=[^()]*(?:\(|$))", subject)

Объяснение

r"""
\s             # Match a single character that is a “whitespace character” (spaces, tabs, and line breaks)
   +              # Between one and unlimited times, as many times as possible, giving back as needed (greedy)
(?=            # Assert that the regex below can be matched, starting at this position (positive lookahead)
   [^()]          # Match a single character NOT present in the list “()”
      *              # Between zero and unlimited times, as many times as possible, giving back as needed (greedy)
   (?:              # Match the regular expression below
                     # Match either the regular expression below (attempting the next alternative only if this one fails)
         \(             # Match the character “(” literally
      |              # Or match regular expression number 2 below (the entire group fails if this one fails to match)
         $              # Assert position at the end of a line (at the end of the string or before a line break character)
   )
)
"""
10
ответ дан Narendra Yadala 15 August 2018 в 19:58
поделиться
  • 1
    Приятно, хотя кажется, что добавляется дополнительная скобка в возвращаемом списке (я не уверен, откуда они идут). Я использую py3. – That Umbrella Guy 10 March 2012 в 09:48
  • 2
    Попробуйте следующее: re.split(r"\s+(?=[^()]*(?:\(|$))", subject) – San4ez 10 March 2012 в 09:50
  • 3
    @Keikoku исправил это. Это из-за группы захвата. – Narendra Yadala 10 March 2012 в 09:51
  • 4
    Как бы вы это расширили для поддержки скобок round () и квадратных []? То есть. игнорировать все строки между любой (хорошо подобранной) парой таких скобок? – gen 18 July 2018 в 01:40

Я бы попытался использовать положительное утверждение.

r'(?<=\))\s+'

Пример:

>>> import re
>>> result = re.split(r'(?<=\))\s+', 'type("book") title("golden apples") pages(10-35 70 200-234) comments("good read")')
>>> result
['type("book")', 'title("golden apples")', 'pages(10-35 70 200-234)', 'comments(
"good read")']
1
ответ дан dave 15 August 2018 в 19:58
поделиться
  • 1
    Не будет работать, если во входном тексте нет круглых скобок, таких как test test test. – Narendra Yadala 10 March 2012 в 09:58
  • 2
    Вопрос уже определил формат. тест тестового теста не является возможным. – dave 10 March 2012 в 16:33

Разделить на ") " и добавить ) к каждому элементу, кроме последнего.

1
ответ дан Karl Knechtel 15 August 2018 в 19:58
поделиться
Другие вопросы по тегам:

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