В настоящее время я изучаю регулярные выражения и наткнулся на запрос.
Итак, название вопроса - это то, что я пытаюсь выяснить. Я думал, что поскольку \s
представляет собой пробел, re.split(" ", string)
и re.split("\s+", string)
будут давать одинаковые значения, как показано ниже:
>>> import re
>>> a = re.split(" ", "Why is this wrong")
>>> a
["Why", "is", "this", "wrong"]
>>> import re
>>> a = re.split("\s+", "Why is this wrong")
>>> a
["Why", "is", "this", "wrong"]
Эти двое дают одинаковые ответы, поэтому я подумал, что это одно и то же. Однако оказывается, что это разные вещи. В каком случае будет иначе? И что мне здесь не хватает, что ослепляет меня?
@schwobaseggl, так что \s
также может представлять больше, чем просто " "
, и может выражать Enter (which is equal to \n)
или " ", with two space characters
?
Отвечает ли это на ваш вопрос? Справочник. Что означает это регулярное выражение?
Это выглядит похоже только на вашем примере.
Разбиение на ' '
(один пробел) делает именно это — оно разбивается на одно пространство. Последовательные пробелы приведут к пустым «совпадениям» при разделении.
Разделение на '\s+'
также будет разделено на несколько вхождений этих символов и включает другие пробелы, а не «чистые пробелы»:
import re
a = re.split(" ", "Why is this \t \t wrong")
b = re.split("\s+", "Why is this \t \t wrong")
print(a)
print(b)
Выход:
# re.split(" ",data)
['Why', '', '', '', 'is', 'this', '', '\t', '\t', '', 'wrong']
# re.split("\s+",data)
['Why', 'is', 'this', 'wrong']
Документация:
\s
Соответствует любому символу пробела; это эквивалентно классу[ \t\n\r\f\v]
. (https://docs.python.org/3/howto/regex.html#matching-characters)
С точки зрения кода, который вы разместили, общая идея заключается в том, что между ними нет большой разницы (с точки зрения его цели), оба собираются вывести это.
["Why", "is", "this", "wrong"]
Разница только в том, что... я бы сказал, в СПОСОБЕ того, как вы собираетесь split
натягивать струну. В этом случае первый использует встроенный метод .split()
в объекте str
, второй использует функцию .split()
из re
.
Теперь этот re.split(" ", "Why is this wrong")
просто разбивает строку на основе этого символа прямо здесь " "
ваш первый параметр или аргумент
Теперь этот re.split("\s+", "Why is this wrong")
разбивает вашу строку на основе этого регулярного выражения \s+
.
Обратите внимание, что " "
— это не то же самое, что \s+
. Это \s+
больше похоже на значение того, что это такое, а " "
в основном просто str
. Вы можете узнать больше о регулярном выражении здесь.
\s+
-> Returns a match where the string contains a white space character
Я также должен сказать, что если вы хотите split
строку, основанную не только на string
, или вы хотите, чтобы она была больше похожа на шаблон? Тогда регулярное выражение для вас.
Имеется в виду космические символы. '\s'
разделяется любыми пробелами (\b, \t, \n, \a, \r
и т. д.). '+'
, если он следует за пробелами. Например, " \n \r \t \v". На мой взгляд, если вам нужно использовать непосредственно строковые операции для разделения, вы должны использовать my_string.split()
как стандартные методы. В противном случае вы должны использовать регулярное выражение. Потому что движок регулярных выражений имеет свою стоимость, и разработчик должен быть в состоянии ее предсказать.
"\s+"
представляет собой один или несколько любых пробелов, включая" ", "\t", "\n"
и еще пару." "
— это просто пробел.