1

我将如何抓住'\id '字符串中的第一个单词?

细绳:

'\id hello some random text that can be anything'

Python

for line in lines_in:
    if line.startswith('\id '):
        book = line.replace('\id ', '').lower().rstrip()

我得到了什么

book = 'hello some random text that can be anything'

我想要的是

book = 'hello'
4

6 回答 6

11

一种选择:

words = line.split()
try:
    word = words[words.index("\id") + 1]
except ValueError:
    pass    # no whitespace-delimited "\id" in the string
except IndexError:
    pass    # "\id" at the end of the string
于 2012-07-13T14:26:29.627 回答
10
>>> import re
>>> text = '\id hello some random text that can be anything'
>>> match = re.search(r'\\id (\w+)', text)
>>> if match:
        print match.group(1)

一个更完整的版本,它在之后捕获任何空格'\id'

re.search(r'\\id\s*(\w+)', text)
于 2012-07-13T14:28:02.973 回答
1

你不需要正则表达式,你可以这样做:

book.split(' ')[0]

但是有很多方法可以实现这一目标

于 2012-07-13T14:27:35.677 回答
1

如果单词和单词之间不必有空格"\id",正则表达式就可以了。(如果空间有保证,则使用拆分方案):

import re
match=re.search(r'\\id\s*(\w+)',yourstring)
if match:
   print match.group(1)

或另一种方式(没有正则表达式):

head,sep,tail=yourstring.partition(r'\id')
first_word=tail.split()[1]
于 2012-07-13T14:29:47.243 回答
0

尝试str.split(' ')在您的字符串书上使用,它将按空格分隔并为您提供单词列表。然后就做book = newList[0]

所以book = book.split(' ')[0]

于 2012-07-13T14:28:17.833 回答
0

由于您已经检查了以 开头的行"\id ",因此只需拆分字符串,您将获得一个单词列表。如果你想要下一个,只需获取元素#1:

>>> line="\id hello some random text that can be anything"
>>> line.split()
['\\id', 'hello', 'some', 'random', 'text', 'that', 'can', 'be', 'anything']
    #0      #1  ...

这样你的代码应该变成这样:

for line in lines_in:
    if line.startswith('\id '):
      book = line.split()[1]
于 2012-07-13T14:30:10.270 回答