使用正则表达式查找子字符串

我在使用正则表达式时遇到了问题。我正在使用的正则表达式如下:

\\S*the[^o\\s]*(?<!theo)\\b

我使用的句子是:

如果世界说theo不是奥利奥饼干,那么thetatheoder、theotatheder、thetatheder就特别好吃。

我希望输出的模式是:the, then, thetatheder, extratheaterly?

简而言之,我接受’the(The)’作为完整字符串或不包含’theo’的字符串中的子字符串。

我该如何修改我的正则表达式来实现这个目标?我在考虑使用管道操作符或问号,但似乎这些方法都不太可行。


回答:

你可以使用\S作为起始边界的负向后发断言,并使用负向先行断言确保单词中不包含theo。

为了匹配The或the,你可以使模式不区分大小写。

(?<!\S)(?!\S*theo\S*)\S*the\S*

分解如下

  • (?<!\S) 负向后发断言,确保左侧不是非空白字符
  • (?!\S*theo\S*) 负向先行断言,确保右侧不包含theo
  • \S*the\S* 匹配the,前后各匹配0次或多次非空白字符

正则表达式演示

如果你只使用单词字符,你也可以使用单词边界\b

\b(?!\w*theo\w*)\w*the\w*\b

正则表达式演示

或者你可以断言单词的一部分是the,并使用断言匹配,如果匹配到t,它后面不应跟着heo

\b(?=\S*the\S*)[^t\s]*(?:t(?!heo)[^t\s]*)+\b

正则表达式演示

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注