首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >python在字符串中查找子字符串

python在字符串中查找子字符串
EN

Stack Overflow用户
提问于 2017-02-13 03:20:52
回答 2查看 2.5K关注 0票数 0

我试图在python中查找字符串中出现的子字符串的次数。但我需要我的搜索非常具体。在搜索子字符串之前,我删除所有标点符号:

MyString.translate(无,string.punctuation)

现在我搜索子字符串。如果我在搜索子字符串"hello bob“,而在字符串中我搜索的是文本"hello bob-其他的东西”或"hello bob'“以及其他文本。当我移除标点符号时,这两个字符‘-不被删除,因为它们不是unicode字符,因此,上面提到的两个字符串不应该被计算为出现的单词"hello bob“。

我使用下面的regex代码尝试获得正确的出现量,在大文件(3000行或更多行)中,我开始找不到正确的单词出现次数。

代码语言:javascript
运行
复制
counter = 0
searcher = re.compile("hello bob" + r'([^\w-]|$)').search
with open(myFile, 'r') as source:
    for line in source:
        if searcher(line):
            counter += 1

其他我试过的东西

我试图使用findAll函数,因为到目前为止,它为我输入的单词提供了正确的出现次数。

我在堆栈溢出上找到了这个:

re.findall(r'\bword\b', read)

不管怎样,我可以用变量代替单词吗?

例如,我想使用:

代码语言:javascript
运行
复制
myPhrase = "hello bob"
re.findall(r'\bmyPhrase\b', read)

这应与以下内容相同:

代码语言:javascript
运行
复制
re.findall(r'\bhello bob\b', read)
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-02-13 04:42:50

您可以使用下面的技巧来执行字符串插值来解决这个问题。

代码语言:javascript
运行
复制
myphrase = "hello bob"
pattern = r'\b{var}\b'.format(var = myphrase)
票数 1
EN

Stack Overflow用户

发布于 2017-02-13 04:49:36

您可以使用re.escape(myPhrase)进行变量替换。

代码语言:javascript
运行
复制
read = "hello bob ! how are you?"
myPhrase = "hello bob"
my_regex = r"\b" + re.escape(myPhrase) + r"\b"

counter = 0
if re.search(my_regex, read, re.IGNORECASE):
    counter += 1
else:
    print "not found"
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42196176

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档