使用Python3.4+Regex匹配最多(但不包括#符号)和一系列小写字母

2024-09-28 16:56:12 发布

您现在位置:Python中文网/ 问答频道 /正文

我想在Python 3.4+中使用正则表达式来匹配“#”符号+下一个小写字母的组合。字符串中有一堆模糊的数据,这使得我很难在一行干净的正则表达式中完成这项工作。下面是一个示例字符串:

Stack #Overflow is a question and answer website for #professional and enthusiast programmers. 

我希望这里的正则表达式与单词#professional(因为它是小写)匹配,跳过#Overflow(因为它是大写)的出现。手术后,我想留下:

professional and enthusiast programmers

#professional and enthusiast programmers

我可以让它与第一个#with ^[^#]*匹配,但是我没有看到一个好的方法将一系列字符放在其中,以指定下面的字符必须是小写的(a-z,等等)

我最初的想法是尝试^[^#a-z]*,但这不起作用

有没有关于如何使用Python实现这一点的想法


Tags: and数据字符串示例isstack符号字符
2条回答

您正在寻找一个“正向前瞻”锚点,该锚点不使用字符串的任何部分,而是在其后对字符进行断言

>>> s = 'Stack #Overflow is a question and answer website for #professional and enthusiast programmers.'
>>> re.search('#(?=[a-z])', s)
<re.Match object; span=(53, 54), match='#'>

(?=...)部分是正向前瞻,断言#后面紧跟着一个小写字符。注意,这与第二个#匹配,而不是第一个。从这里可以获得字符串的其余部分:

>>> s[_.end():]
'professional and enthusiast programmers.'

_这里是repl中的最后一个表达式(您希望在实际代码中将匹配项分配给一个变量)

我认为您可以使用模式r'#([a-z])(.*)'re.search来获得预期的结果

import re

line = "Stack #Overflow is a question and answer website for #professional and enthusias programmers."

matchObj = re.search(r'#([a-z])(.*)', line)

if matchObj:
   print("match string : ", matchObj.group())

相关问题 更多 >