正则表达式,用于匹配特殊的字母数字模式

时间:2019-05-20 13:48:20

标签: regex python-3.x

您好,我是regex的新用户; 我想从这里的复杂代码中仅获取8位字符;

["AA","BB","CC","DD","EE","FF","GG","AAA","SSS","sDDD","mFFFa"],"gaa":"aaa","timasa});
    **var csrf_token = '551a8513';**

    Unimportanttext = '/justanothernonimportanttext&&h=551a8513';

我尝试了token\s=\s'[^']*,但结果为:["token = '551a8513"] 我只需要551a8513这部分。您能帮我提供正则表达式代码吗?谢谢 英语水平低,可能是我有错误。对不起

编辑: 我们在这里得到2个答案,并且两个都可以! 1)

token = re.findall("(?<=csrf_token = ')[^\']+",driver.page_source)
print(link + str(token[0]))

2)

token = re.findall("csrf_token = '(.+)'", driver.page_source)
print(link + str(token[0]))

谢谢你们!希望你过得好! :)

2 个答案:

答案 0 :(得分:1)

尝试以下积极的后向模式:

(?<=csrf_token = ')[^\']+

这将返回在“ csrf_token =”之后用单引号引起来的所有内容(“值”)。基本上,它将与您获得的内容匹配,但仅返回您关心的字符串部分。希望这会有所帮助。

答案 1 :(得分:1)

我们所需的输出包含数字,后跟小写字母和数字。我们可以使用类似于以下内容的表达式来捕获它:

([0-9]+[a-z]+[0-9]+)

Demo

或者我们可以使用

捕获它
(([a-z]+)?([0-9]+))

Demo

或者我们可以简单地在前后使用'

'(.+)'

Demo

我们还可以添加更多边界。如:

csrf_token = '(.+)'

Demo

根据The fourth bird的建议,将其修改为:

csrf_token = '(.+?)'

测试

# -*- coding: UTF-8 -*-
import re

string = """

["AA","BB","CC","DD","EE","FF","GG","AAA","SSS","sDDD","mFFFa"],"gaa":"aaa","timasa});
    **var csrf_token = '551a8513';**

    Unimportanttext = '/justanothernonimportanttext&&h=551a8513';

"""
expression = r'csrf_token = \'(.+?)\''
match = re.search(expression, string)
if match:
    print("YAAAY! \"" + match.group(1) + "\" is a match  ")
else: 
    print(' Sorry! No matches!')

输出

YAAAY! "551a8513" is a match