如何从交替正则表达式中选择第一个匹配项?
How to choose first match from Alternation regex?
我正在尝试从 URL 之前的推文中提取所有以 "https:..." 开头的文本。
推文示例:
"This traditional hairdo is back in fashion thanks to the coronavirus, and Kenyans are using it to raise awareness https://... (Video via @QuickTake)"
在这个例子中,我想删除 "https://... (Video via @QuickTake)" 并从头开始获取文本。 但它也适用于推文中没有任何 URL link 的推文。
我试过这个表达式,当它带有 URL:
时得到了两个匹配项
/(.*)(?=\shttps.*)|(.*)
我怎样才能让它只检索推文中的文本。
提前致谢!
这可能过于简单化了,但简单的 str.find
可能就可以解决问题:
>>> s = "This traditional hairdo is back in fashion thanks to the coronavirus, and Kenyans are using it to raise awareness https://... (Video via @QuickTake)"
>>> s[:s.find('https://')]
'This traditional hairdo is back in fashion thanks to the coronavirus, and Kenyans are using it to raise awareness '
您基本上只是将推文编入索引,直到找到 https://
的第一个实例为止。
请注意,在 https://
未出现在推文中的情况下,仅靠这种方法是行不通的。当找不到 https://
时,s.find('https://')
将 return -1,这会弄乱我们的索引。如果找不到,只需将索引器(下面的link_index
)设置为完整推文的长度:
>>> s = 'this is some tweet without a URL'
>>> link_index = s.find('https://')
>>> if link_index == -1:
... link_index = len(s)
...
>>> s[:link_index]
'this is some tweet without a URL'
您可以删除 https
和所有跟随到字符串末尾的内容,使用
tweet = re.sub(r'\s*https.*', '', tweet)
详情:
\s*
- 0+ 个空格
https
- 一个字符串
.*
- 字符串的其余部分(行)。
我正在尝试从 URL 之前的推文中提取所有以 "https:..." 开头的文本。
推文示例:
"This traditional hairdo is back in fashion thanks to the coronavirus, and Kenyans are using it to raise awareness https://... (Video via @QuickTake)"
在这个例子中,我想删除 "https://... (Video via @QuickTake)" 并从头开始获取文本。 但它也适用于推文中没有任何 URL link 的推文。
我试过这个表达式,当它带有 URL:
时得到了两个匹配项/(.*)(?=\shttps.*)|(.*)
我怎样才能让它只检索推文中的文本。
提前致谢!
这可能过于简单化了,但简单的 str.find
可能就可以解决问题:
>>> s = "This traditional hairdo is back in fashion thanks to the coronavirus, and Kenyans are using it to raise awareness https://... (Video via @QuickTake)"
>>> s[:s.find('https://')]
'This traditional hairdo is back in fashion thanks to the coronavirus, and Kenyans are using it to raise awareness '
您基本上只是将推文编入索引,直到找到 https://
的第一个实例为止。
请注意,在 https://
未出现在推文中的情况下,仅靠这种方法是行不通的。当找不到 https://
时,s.find('https://')
将 return -1,这会弄乱我们的索引。如果找不到,只需将索引器(下面的link_index
)设置为完整推文的长度:
>>> s = 'this is some tweet without a URL'
>>> link_index = s.find('https://')
>>> if link_index == -1:
... link_index = len(s)
...
>>> s[:link_index]
'this is some tweet without a URL'
您可以删除 https
和所有跟随到字符串末尾的内容,使用
tweet = re.sub(r'\s*https.*', '', tweet)
详情:
\s*
- 0+ 个空格https
- 一个字符串.*
- 字符串的其余部分(行)。