Python 正则表达式模式问题?

Python 正则表达式模式问题?,python,Python,我很难理解正则表达式模式。有人能帮我把正则表达式模式和所有以s结尾的单词匹配起来吗。以a开头,以a结尾(比如安娜)。 如何写结尾?一般来说,我会使用\b将“单词边界”与\w匹配,后者与单词成分匹配(为[A-Za-z0-9_])。然后你可以做一个或分组来匹配“s”或“ing”。结果是: /\b\w+(s|ing)\b/ 单词边界由\b给出,因此以下正则表达式匹配以ing或s结尾的单词:“\b(\w+?(?:ing | s))\b”其中as\b是单词边界,\w+是一个或多个“单词字符”,“code

我很难理解正则表达式模式。有人能帮我把正则表达式模式和所有以s结尾的单词匹配起来吗。以a开头,以a结尾(比如安娜)。
如何写结尾?

一般来说,我会使用\b将“单词边界”与\w匹配,后者与单词成分匹配(为[A-Za-z0-9_])。然后你可以做一个或分组来匹配“s”或“ing”。结果是:

/\b\w+(s|ing)\b/

单词边界由
\b
给出,因此以下正则表达式匹配以ing或s结尾的单词:
“\b(\w+?(?:ing | s))\b”
其中as
\b
是单词边界,
\w+
是一个或多个“单词字符”,“code>(?:ing | s)是
ing
的未捕获组

正如您所问的“如何开发正则表达式”:

第一:不要在复杂任务中使用正则表达式。它们很难读、写和维护。例如,有-但它的计算机生成,你不应该在实践中使用

从简单开始,添加边案例。开始时,计划需要使用哪些字符:您说过需要以
s
ing
结尾的单词。因此,您可能需要一些东西来表示单词、单词的结尾和文字字符
s
ing
。什么是单词?这可能会因大小写而异,但至少每个字母都是如此。在中查找,您可以找到
\w
,它是
[a-zA-Z0-9\
,符合我对单词字符的印象。您还可以在那里找到
\b
,这是一个单词边界

所以“第一次伪代码尝试”类似于匹配单词的
\b\w…\w\b
。我们仍然需要“形式化”
,我们希望它具有“一个或多个字符”的含义,直接翻译成
\b\w+\b
。我们现在可以匹配一个单词了!我们仍然需要
s
ing
|
转换为或,那么下面是什么:
\b\w+ing | s\b
?如果您对此进行测试,您将看到它将匹配一些令人困惑的东西,如
inset
,这些东西不应该与我们的正则表达式匹配。发生了什么事?正如您可能已经看到的那样,
不知道“它应该或应该是哪个部分”,因此我们需要引入括号:
\b\w+(ing | s)\b
。恭喜你,你现在已经到达了一个有效的正则表达式

为什么(以及如何)这与我首先给出的示例不同?首先,我编写了
\w+?
而不是
\w+
+
转换为非贪婪版本。如果你知道贪婪和非贪婪的区别,跳过这一段。考虑下面的代码:<代码> AaAAbA < /代码>,我们希望匹配包含大写字母>代码> < <代码>的内容。天真的尝试:
A\w+A
,因此一个或多个单词字符包含在
A
中。这与
AaA
匹配,但也与
AaAAbA
匹配,
A
仍然可以与
\w
匹配。在不进一步配置的情况下,
*+?
量词都会尝试尽可能多地匹配。有时,就像在A示例中一样,您不希望这样,然后可以在量词后面使用
来表示您想要一个非贪婪版本,一个尽可能少匹配的版本

但是在我们的例子中,这是不需要的,单词之间用空格隔开,空格不是
\w
的一部分。所以事实上,你可以让
+
变得贪婪,一切都会好起来的。如果你使用
(任何字符),你通常需要小心不要匹配太多

另一个区别是使用
(?:s|ing)
而不是
(s|ing)
?:
在这里做什么?它将捕获组更改为非捕获组。一般来说,你不想从正则表达式中得到“一切”。考虑下面的正则表达式:<代码>,我想转到\W+。您对整个句子不感兴趣,只对
\w+
感兴趣,因此您可以将它捕获到一个组中:
我想转到(\w+
)。这意味着您对这条特定的信息感兴趣,希望稍后检索它。有时(如使用
|
)需要将表达式分组在一起,但对其内容不感兴趣,然后可以将其声明为非捕获。否则,您将获得组(
s
ing
)而不是实际单词

因此,总结一下: *从小处做起 *层出不穷 *总是用例子来测试


事实上,我只是尝试了
re.findall(
\b\w+(?:ing | s)\b
,“钓鱼词”)
,但没有成功<代码>\w+(?:ing | s)
有效。我不知道为什么,也许其他人可以解释。正则表达式是一种神秘的东西,只用于简单和易于测试的任务。

到目前为止,您尝试了什么?除了,互联网上到处都有教程。我使用
\b([A-Za-z]*(?:ing | s))\b
?:
是非捕获组语法。我们使用它只是为了使用交替符号
|
\b代表单词边界,在syntonym的回答中解释如下。你能帮我把每个部分都分解一下吗?哪一部分代表结束?非常感谢你的回答。。但是你能解释一下你是怎么做到的吗。我想了解这一点,我从来没有使用过像syntonym使用的更复杂的正则表达式,所以也许我在这方面落后了。我从sed和gawk这样的文本处理程序开始——这些程序在不感到不知所措的情况下奠定了基本正则表达式的基础(例如:进入第3节)。我发现Perl/Python增强的regexp非常复杂,很容易被吓倒。从“.”和“*”和“+”开始,你会发现自己在寻找你需要的棘手的东西。因为我需要以ing或s结尾的单词。。我不需要“\>”?@doctorwho11你为什么认为你需要“\>”?你说的是HTML吗?你能给出一个示例文本和你想从中提取的单词吗