2015-05-24 6 views
3

У меня есть многострочная строка, сгенерированная скриптом, который создает искусство ASCII из изображения. Он создает линию, затем добавляет \r и продолжает двигаться. Как получить длину первой строки или до того, как она произнесет \r без использования регулярного выражения? Предпочтительно код является достаточно читаемым.Как получить длину первой строки в многострочной строке?

+0

Что случилось с регулярным выражением? Я думаю, что они будут подходящим решением. – skrrgwasme

+0

Есть ли другое решение? Я бы предпочел не использовать регулярное выражение только потому, что еще не узнал его, и я предпочел бы, чтобы моя программа содержала только то, что я понимаю. –

ответ

3

Try:

first, _, _ = s.partition('\r') 
k = len(first) 

Если вам не нужна строка, вы можете просто использовать index:

k = s.index('\r') 

Это работает, потому что s.index('\r') содержит самый низкий индекс k, для которого s[k] == '\r' - это означает, что есть ровно k символов (s[0] через s[k-1]) в первой строке, перед символом возврата каретки.

+0

О, мне это нравится, upvoted! –

+0

Я принял это, потому что все целые строки полезны. Я использую PIL, чтобы найти размер в пикселях строки. Я использую моноширинный шрифт, поэтому не имеет значения, нахожу ли я размер всей строки или размер одного символа по длине строки, но я чувствую себя более уверенным в поиске длины всей строки. –

4

С find или index?

>>> 'abcfoo\rhahahahaha'.find('\r') 
6 
>>> 'abcfoo\rhahahahaha'.index('\r') 
6 
1
import string 
string.split(yourString, '\r') 
length = len(string[0]) 

Итак, что мы имеем здесь прямо вперед. Мы берем вашу строку, и мы ее разделяем, как только получаем тег/r. Затем, поскольку все строки, заключенные с/r, находятся в массиве, мы просто подсчитываем первую захваченную строку в массиве и присваиваем ей длину var.

+0

Все в порядке :) спасибо в любом случае –

+1

Почему бы вам не изменить это, добавьте строку, которая говорит 'length = len (string [0])'? Это будет правильным ответом и будет хорошо работать. –

+0

Ну, у вас так много замечательных ответов, что к тому времени, когда я пришел, чтобы отредактировать это, мне уже ответили lol –

1

Только в случае, если вам нужно еще одно решение ..:

with open('test.txt','r') as f: 
    t = f.read() 
    l = t.splitlines() 
    print(len(l[0])) 
+0

Это тоже хорошо, мне нравится это решение. Приостановлено, но не принято. –

 Смежные вопросы

  • Нет связанных вопросов^_^