我在弄清楚我认为非常简单的正则表达式时遇到了一些麻烦。我正在尝试使用Python创建一个Twitter机器人,以推文某位作者的引文。 我需要它:
经过反复试验,我想出了这个正则表达式,当我测试它时似乎可以完成工作:r'(?P<quote>.*)(?P<link>https.*)?'
因为我不需要验证url,所以我认为我不需要任何复杂的正则表达式,例如我在研究中遇到的正则表达式。
但是当我尝试启动该bot时,我意识到它无法正确解析引号,而是将整行捕获为“ quote”(并且无法识别网址)。
让我感到困惑的是,它并没有始终如一地失败,相反,似乎有时它会起作用,而有时却不会。
以下是我尝试执行的操作失败的示例:https://regex101.com/r/mODPUq/1/
这是我编写的全部功能:
def parseText(text):
# Separate the quote from the link
tweet = {}
regex = r'(?P<quote>.*)?(?P<link>https.*)?'
m = re.search(regex, text)
tweet = m.groupdict("")
return tweet
[EDIT]好吧,我并没有以这种方式解决问题,但是找到了一种可能不太完善但至少看起来能解决问题的解决方法:
getUrl()
,然后仅当它返回非None
的值时,才呼叫getQuote()
。如果为url == None
,我可以直接发布整条推文。这样,正则表达式部分变得非常简单,无论有没有URL,到目前为止,它似乎都能正常工作。我只是有一个小问题,即使没有网址,即使我使用str.split('/n')
切出换行符也必须存在,因为当我加引号时,最后一个在换行符上。
由于技术上没有解决问题,我暂时保留了该问题,这要归功于那些给了我答案的人,但它似乎没有用。
答案 0 :(得分:1)
您还可以将正则表达式字符串更改为r'(?P<quote>.*)?.(?P<link>https.*)'
,这还会处理引号和链接之间的所有多余字符