我需要在正则表达式搜索之前包含`r`吗?

时间:2019-02-06 19:31:28

标签: python regex

我想在定界符上分割术语。我想输入数字index,名字输入name

我的条件:

The Beehive
12. Bar 821
13. Natives Bar
14. Last Call Bar
15. Scarlet Lounge
16. Linden Room
17. Rooftop 25

我正在使用以下代码:

terms = ['The Beehive', '12. Bar 821', '13. Natives Bar', '14. Last Call Bar', '15. Scarlet Lounge', '16. Linden Room', '17. Rooftop 25']

delim = re.match('\d+\. ', terms)

if delim is None:
    print(delim)
else:
     index = index[:delim.end()]
     name = index[delim.end():]

这无法捕获拆分。我已经通过打印delim进行了测试,但它与任何东西都不匹配。

2 个答案:

答案 0 :(得分:2)

与字符串相比,您正在使用列表

import re
terms = ['The Beehive', '12. Bar 821', '13. Natives Bar', '14. Last Call Bar', '15. Scarlet Lounge', '16. Linden Room', '17. Rooftop 25']

delim = re.compile('\d+\.')
for term in terms:
    match = delim.search(term)
    if match:
        print(term[:match.end()]) #index
        print(term[match.end():]) #name

答案 1 :(得分:0)

match()函数仅接受单个字符串,因此您必须分别遍历terms

>>> for term in terms:
...     match = re.match(r'^(?P<index>(\d+\. )?)(?P<name>.*)$', term)  # Return a match object which contains the named groups.
...     index, _, name = match.groups()  # Unpack the groups.
...     # index = match.group('index')
...     # name = match.group('name')
...     print(index, name)
... 
 The Beehive
12.  Bar 821
13.  Natives Bar
14.  Last Call Bar
15.  Scarlet Lounge
16.  Linden Room
17.  Rooftop 25

还要注意在正则表达式中使用groups,该表达式将返回带有命名匹配项的Group对象。

关于是否使用r''前缀,请查看this question或文档摘录:

  

需要r前缀,使文字成为原始字符串文字[…],因为与常规表达式相比,Python无法识别的普通“煮熟”字符串文字中的转义序列现在导致{{ 1}},并将最终成为DeprecationWarning。参见The Backslash Plague