我有一个使用before模式的正则表达式,如下所示:
>>> RE_SID = re.compile(r'(?P<sid>(?<=sid:)([A-Za-z0-9]+))')
>>> x = RE_SID.search('sid:I118uailfriedx151201005423521">>')
>>> x.group('sid')
'I118uailfriedx151201005423521'
和另一个像这样:
>>> RE_SID = re.compile(r'(?P<sid>(?<=sid:<<")([A-Za-z0-9]+))')
>>> x = RE_SID.search('sid:<<"I118uailfriedx151201005423521')
>>> x.group('sid')
'I118uailfriedx151201005423521'
如何在解析这两个不同的行之后组合这两个模式:
sid:A111uancalual2626x151130185758596
sid:<<"I118uailfriedx151201005423521">>
只向我返回相应的ID。
答案 0 :(得分:1)
RE_SID = re.compile(r'sid:(<<")?(?P<sid>([A-Za-z0-9]+))')
使用它,我刚刚测试过,它对我有用。我已经把一些东西搬了出去。
答案 1 :(得分:0)
除了调整正则表达式之外,只需删除除字母数字和冒号之外的任何字符,就可以更轻松地解析字符串。然后,只需按冒号拆分并获取最后一项:
>>> import re
>>>
>>> test_strings = ['sid:I118uailfriedx151201005423521">>', 'sid:<<"I118uailfriedx151201005423521']
>>> pattern = re.compile(r"[^A-Za-z0-9:]")
>>> for test_string in test_strings:
... print(pattern.sub("", test_string).split(":")[-1])
...
I118uailfriedx151201005423521
I118uailfriedx151201005423521
答案 2 :(得分:0)
你可以用一个正则表达式实现你想要的东西:
\bsid:\W*(?P<sid>\w+)
请参阅regex demo
正则表达式分解:
\bsid
- 全文sid
:
- 字面冒号\W*
- 零个或多个非单词字符(?P<sid>\w+)
- 一个或多个单词字符捕获到名为“sid”的组中import re
p = re.compile(r'\bsid:\W*(?P<sid>\w+)')
#test_str = "sid:I118uailfriedx151201005423521\">>" # => I118uailfriedx151201005423521
test_str = "sid:<<\"I118uailfriedx151201005423521" # => I118uailfriedx151201005423521
m = p.search(test_str)
if m:
print(m.group("sid"))