我需要从URL路径中提取一些文本,但我对Regex知之甚少。
import re
url = '/s/GETTHISDATA/canBeIgnored/canBeIgnored'
myData = #needs to equal GETTHISDATA
答案 0 :(得分:2)
看看这个:
>>> import re
>>> url = '/s/GETTHISDATA/canBeIgnored/canBeIgnored'
>>> re.findall('(?<=/).*?(?=/)', url)
['s', 'GETTHISDATA', 'canBeIgnored']
>>> re.findall('(?<=/).*?(?=/)', url)[1]
'GETTHISDATA'
>>>
这样做可以捕获两个/
之间的零个或多个字符(非贪婪)。更清楚的是,这是一个细分:
(?<=/) # Poisitive look-back assertion to test if text is preceded by a /
.*? # Zero or more non-whitespace characters that are matched non-greedily
(?=/) # Positive look-ahead assertion to test if text is followed by a /
然而,更简洁,非正则表达式的解决方案就是分开/
:
>>> url.split('/')
['', 's', 'GETTHISDATA', 'canBeIgnored', 'canBeIgnored']
>>> url.split('/')[2]
'GETTHISDATA'
>>>
就个人而言,我会使用第二种解决方案。正则表达式在这里似乎有些过分。