我用python编写了下面的代码,用于查找文本中是否有一个完整的单词。在
def findWholeWord(w):
return re.compile(r'\b({0})\b'.format(w), flags=re.IGNORECASE).search
现在,如果一个单词与另一个单词之间的范围在10个单词之间,那么正则表达式如何查找呢?例如,假设我有以下字符串:
“你好,世界!程序是一个输出“你好,World!”在显示设备上。在大多数编程语言中,它是一个非常简单的程序,经常被用来向初学者演示构造一个工作程序的基本语法。它还用于验证语言或系统是否正常运行。”
如果我传递单词Hello和simple,它应该匹配,因为它们之间的单词数是<;=10。在
谢谢!在
首先是假设检验。您的findHoleWorld()函数返回的是方法而不是模式,所以我猜它应该这样调用:
通常我们会返回一个模式,在这个模式上我们可以应用不同的搜索方法。你所做的是有效的,但却把你锁在一个方法上。在
现在让我们来讨论\b(和同伴\b)。\b运算符与您发现的单词边界相匹配。但关键是“概念”。答案是非常狭窄的集合[A-Za-z0-9_9]“单词”不是一个自然语言单词,而是一个计算机语言标识符。\b运算符的存在更多的是为了语言本身的解析器,而不是供您使用。在
这意味着它不能处理常见的英语情况,例如:
^{pr2}$没有一个简单的答案适用于所有的英语,无论你想出什么样的模式,都会有例外。你需要弄清楚你要解决的问题有哪些局限性。在
回到你最初的问题,一个近似的解决方案:
您可以在regex中的这两者之间添加
(?:\W+\w+){0,10}\W+
子模式:见regex demo
正则表达式解释:
\bhello
-一个完整的单词hello
(?:\W+\w+){0,10}
-0到10个序列,由一个或多个非单词字符后跟一个或多个单词字符(\w
匹配[a-zA-Z0-9_]
或所有Unicode字母和数字,如果提供了re.U
标志),然后是。。。在\W+
-一个或多个非单词字符(标点符号、空格等)simple\b
-一个完整的单词simple
所以,你的代码看起来像
^{pr2}$见Python demo
如果单词的位置可以是任意的,则需要添加一个替代词:
Another demo
代码:
请尝试以下正则表达式:
示例:https://regex101.com/r/oL7tN8/4
相关问题 更多 >
编程相关推荐