import re
teststring = " Stack, Code and StackOverflow"
extractText = re.search(r"(\s)[sS][^*\s]*[^sS]*", teststring)
print(extractText[0])
#non-regex solution
listwords = teststring.split(' ')
# non regex solution
start = 0
end = 0
for i,word in enumerate(listwords):
if word.startswith('s') or word.startswith('S'):
if start == 0:
start = i
else:
end = i
break
newstring = " " + " ".join([word for word in listwords[start:end]])
print(newstring)
2条答案
按热度按时间isr3a4wc1#
我认为这应该可以。我从this thread中改编了正则表达式。你也可以测试here。我还包括了一个非正则表达式的解决方案。我基本上跟踪了一个以“s”开头的单词的第一次出现,以及下一个以“s”开头的单词,并获得该范围内的单词。
输出
iszxjhcz2#
例如,可以使用捕获组:
说明
(
捕获组1S(?<!\S.)
匹配S
并AssertS
的左侧没有空白边界.*?
匹配任意字符,尽可能少)
关闭”组\s*
匹配可选空格字符S(?<!\S.)
匹配S
并AssertS
的左侧没有空白边界请参阅regex demo和Python demo。
示例代码:
输出量
另一种选择是使用lookaround将
S
Assert到右侧,并且不使用它以允许多个匹配在彼此之后:Regex demo
输出量