我正在创建一个网站的搜索功能。我需要将用户输入的句子提取到列表中,但要求引号中的单词应该是列表中的一个项目。
请关注我期待中的杰夫·沃森和纽约这两个词。
期望:
str = 'Hello, I am "Jeff Watson" from a part of "New York".'
result = ["Hello", "I", "am", "Jeff Watson", "from", "a", "part", "of", "New York"]
如果您的答案也适用于单引号,那将是最好的。
查找带引号的子字符串或单词的正则表达式:
import re
string = 'Hello, I am "Jeff Watson" from NY.'
[next(x for x in m if x)
for m in re.findall(r'"([^"]*)"|'([^']*)'|(w+)', string)]
(另外,尽量避免在 Python 中使用str
作为变量名,因为它通常包含字符串类型。
这是另一种方法:
[m[1] for m in re.findall(r'(["'])?((?(1).*?1|w+))', string)]
一个非常新手的解决方案
s = 'Hello, I am "Jeff Watson" from NY.'
ans = []
i = 0
while i < len(s):
if s[i].isalnum():
temp = ""
while s[i].isalnum():
temp += s[i]
i += 1
ans.append(temp)
if s[i] == '"':
temp = '"'
i += 1
while s[i] != '"':
temp += s[i]
i += 1
temp += '"'
ans.append(temp)
i += 1
print(ans)