1

我正在尝试创建一个 python 正则表达式,它将匹配一个人的身高,以英尺和英寸为单位,由一个撇号分隔(例如 6'0)。就我的目的而言,有效高度在 4'0 和 6'11 之间:这是我目前所拥有的:

import re
import requests
url = 'https://rolltide.com/sports/football/roster'
re.findall('''([456][']([02-9]|1[0-1]?))''', (requests.get(url)).text)

此正则表达式返回以下内容(我将只显示前几个匹配项):

[("6'1", '1'),
 ("6'2", '2'),
 ("6'1", '1'),
 ("6'2", '2'),
 ("6'1", '1'),
 ("6'4", '4'),
 ("6'1", '1'),
 ("6'1", '1'),
 ("6'2", '2'),
 ("6'3", '3'),
 ("6'0", '0'),
 ("6'1", '1'),
 ("6'2", '2'),
 ("6'2", '2'),
 ("6'0", '0'),
 ("6'1", '1'),
 ("6'0", '0'),
 ("5'10", '10'),
 ...
 ]

我希望正则表达式返回以下内容:

["6'1",
 "6'2",
 "6'1",
 "6'2",
 "6'1",
 "6'4",
 "6'1",
 "6'1",
 "6'2",
 "6'3",
 "6'0",
 "6'1",
 "6'2",
 "6'2",
 "6'0",
 "6'1",
 "6'0",
 "5'10",
 ... 
 ]

我真的不确定问题是什么。我是正则表达式的新手,但我认为这与括号的用法有关。

4

2 回答 2

1

问题是您正在创建两组,一组用于单独匹配英寸,另一组用于匹配整个高度。这就是为什么您要分别获得身高和英寸的原因。

于 2021-12-24T07:00:30.097 回答
1

只需使用模式[4-6]'(?:[0-9]|1[0-1])"

import re
import requests
url = 'https://rolltide.com/sports/football/roster'
re.findall('[4-6]'(?:[0-9]|1[0-1])"', (requests.get(url)).text)

这个正则表达式模式说匹配:

[4-6]'      4-6 feet
(?:
    [0-9]   0-9 inches
    |       OR
    1[0-1]  10-11 inches
)"

这是一个演示,显示正则表达式正在运行。

于 2021-12-24T06:55:38.250 回答