У меня есть вывод команды в табличной форме. Я анализирую этот вывод из файла результатов и сохраняю его в строке. Каждый элемент в одной строке разделяется одним или несколькими пробелами, поэтому я использую регулярные выражения, чтобы сопоставить 1 или несколько пробелов и разделить их. Однако между каждым элементом вставляется пробел:
>>> str1="a b c d" # spaces are irregular
>>> str1
'a b c d'
>>> str2=re.split("( )+", str1)
>>> str2
['a', ' ', 'b', ' ', 'c', ' ', 'd'] # 1 space element between!!!
Есть лучший способ сделать это?
После каждого разделения str2
добавляется в список.
'str2'
str1.split()
. Нет необходимости в регулярном выражении.Ответы:
При использовании
(
,)
вы захватываете группу, если вы просто удалите их , вы не будете иметь эту проблему.>>> str1 = "a b c d" >>> re.split(" +", str1) ['a', 'b', 'c', 'd']
Однако нет необходимости в регулярном выражении,
str.split
без указанного разделителя он разделит его на пробелы. В данном случае это был бы лучший способ.>>> str1.split() ['a', 'b', 'c', 'd']
Если вам действительно нужно регулярное выражение, вы можете использовать это (
'\s'
представляет собой пробел, и он более четкий):>>> re.split("\s+", str1) ['a', 'b', 'c', 'd']
или вы можете найти все символы без пробелов
>>> re.findall(r'\S+',str1) ['a', 'b', 'c', 'd']
источник
str.split
определенно лучший: D['', 'a', 'b', 'c', 'de', '']
str1.split()
string.split()
- это вариант. Я спрашивал, можно ли это сделать и с регулярным выражением?re.findall
вариант?str.split
Метод автоматически удаляет все пробелы между элементами:>>> str1 = "a b c d" >>> str1.split() ['a', 'b', 'c', 'd']
Документы здесь: http://docs.python.org/library/stdtypes.html#str.split
источник
str.split()
вероятно, лучший выбор для чего-то столь же легкого, как эта.Когда вы используете,
re.split
а шаблон разделения содержит группы захвата, эти группы сохраняются на выходе. Если вы этого не хотите, используйте вместо этого группу без захвата.источник
str.split
, вероятно, лучше для вашего примера. Я просто хотел объяснить, почему у вас такое поведение.На самом деле это очень просто. Попробуй это:
str1="a b c d" splitStr1 = str1.split() print splitStr1
источник
stringToSplit.split()