我是Python的新手,仍然在学习它的基本概念。我想知道是否有任何简单的方法可以从我的搜索字符串匹配任何单词的子字符串的句子中获得所有单词。
sentence = "Hi this is just an example.com sentence"
search = ".com"
输出:
example.com
我试图使用re模块,但在我需要获取整个单词的地方卡住了。这就是我所尝试的,它返回整个句子作为输出:
re.findall(f".*{search}*", sentence)
我想知道我是否使用了正确的方法,或者是否有其他方法可以解决这个问题。
附加问题:
参考John的答案,[w for w in sentence.split() if '.com' in w]
我就能得到预期的输出。作为附加要求,如果
sentence = "Hi this is just an Example.COM sentence"
我仍然希望它与。com匹配并返回Example.COM
请考虑您创建了什么图案
sentence = "Hi this is just an example.com sentence"
search = ".com"
print(f".*{search}*")
给输出
.*.com*
匹配任何字符(.
)重复0次或以上(*
),后跟任何字符(.
),后跟单个字符c
,后跟单个字符o
,后跟字符m
,重复0次或以上。
在这种情况下,我将使用re
如下方式
import re
sentence = "Hi this is just an example.com or example.COM sentence"
search = ".com"
found = re.findall(f"\w*{re.escape(search)}\w*",sentence,re.IGNORECASE)
print(found)
给输出
['example.com', 'example.COM']
解释:我使用re.escape
,所以.
在搜索中被视为文字点,而不是任何字符,我正在寻找由零或更多(*
)字字符(w
)前缀和后缀的搜索,并使用re.IGNORECASE
标志以不区分大小写的方式进行搜索。
k=[]
for x in sentence.split():
if search in x:
k.append(x)
print(k)
['example.com']
或者像@John在注释中建议的那样使用列表推导式:
[w for w in sentence.split() if '.com' in w]
#['example.com']
如果您想使用正则表达式(可能您正在计划进行更复杂的搜索)
#! /usr/bin/env python3
import re
sentence = "Hi this is just an example.com sentence, don't match dotcom"
search = "\.com"
print(re.findall(f"\b(\w*{search})\b", sentence))
匹配单词边界(b
),结果
['example.com']
使用repackage:
import re
c = re.compile(f"[A-Za-z]+{search}")
c.findall(sentence)