当前位置: 首页 > 知识库问答 >
问题:

Python 正则表达式 搜索中间有非字母字符的单词

沈飞舟
2023-03-14

我需要找到在字符串中出现字母a-z的小写单词的索引。但是,字符串中可能有一堆非字母字符。

例如,单词“don't”跨越短语“don't that”中的索引 [0, 5)。

我四处搜索匹配非字母字符的方法,并使用以下正则表达式实现了这一点:

>>> import re
>>> pattern = re.compile("d[^a-z]*o[^a-z]*n[^a-z]*t[^a-z]*")
>>> test = "don't"
>>> pattern.search(test).start()
0
>>> pattern.search(test).end()
5
>>> test = "d'o&&&&&n't"
>>> pattern.search(test).start()
0
>>> pattern.search(test).end()
11
>>>

有没有更简洁的方法来表达这个正则表达式?或者,我必须编写代码在要搜索的每个单词的每个字符之间插入[^a-z]*?

对不起,如果这个问题已经存在-我不知道如何准确表达这个问题。谢谢你的帮助。

共有3个答案

郎意
2023-03-14

试试这个:

pattern = re.compile("[^\w']|don't")
晏正豪
2023-03-14

是的,如果这真的是你的意图,你必须按照你表现的方式去做。

正则表达式只匹配特定字符或字符类型的后续序列。它不知道您需要匹配< code>d

方安怡
2023-03-14

您可以匹配像这样的每个小写单词,在非捕获组下使用重复:

(?:[a-z][^a-z]*)+

或者,您可以为每个给定的单词自动执行这个正则表达式:

>>> word = 'dont'
>>> regex = ''.join(x + '[^a-z]*' for x in word)
>>> regex
'd[^a-z]*o[^a-z]*n[^a-z]*t[^a-z]*'
 类似资料:
  • 问题内容: 这是我的代码,以确定一个单词是否包含任何非字母数字字符: 我想知道正则表达式是否错误。我知道会匹配任何非单词字符。关于我所缺少的任何想法? 问题答案: 将您的正则表达式更改为:

  • 其中,我需要包括连字符和空格。 这意味着还必须可以输入值“”。

  • 我正在尝试用Java编写一个正则表达式,它从段落中删除所有非字母数字字符,但单词之间的空格除外。 如何修复此错误?

  • 问题内容: 我需要在给定正则表达式的字符串中找到所有匹配项。我一直在这样做,直到遇到一个案例,它没有达到我的预期。例如: 在这种情况下,返回我需要的内容(最长的匹配项),但是行为却有所不同,尽管文档暗示它应该是相同的: 匹配所有出现的模式,而不仅仅是第一个。 为什么行为不同? 如何获得with (或其他方式)的结果? 问题答案: 好的,我从文档中查看发生了什么…… 如果该模式中存在一个或多个组,则

  • 我有一组由连字符分隔的ID,其中至少可以有6个字符,包含字母数字值和一些特殊字符,在末尾,只有数字值是不允许的。如下所示: 我正在尝试下面给出的具有以下规则的以下模式,但面临一些测试查询的困难... https://regex101.com/r/d8MFRE/5

  • 我创建了以下正则表达式: 它应该接受字母数字、空格和撇号。输入应至少为1个字符,最多为24个字符。但它也只接受带撇号和空格的输入(例如,