我尝试学习python3,并且我对正则表达式有点厌烦。我为此研究了HOWTO,但我不太了解。this page
1\d2\D2
^a\w+z$
您可以通过阅读表达式并逐步选择适当的字符来生成示例字符串。
例如,1\d2\D2:
1\d2\D2 -> 1 ^ 1 表示文字数字 1 1\d2\D2 -> 17 ^^ \d 表示任何数字 (0-9)。让我们选择7。 1\d2\D2 -> 172 ^ 2 表示字面数字 2。 1\d2\D2 -> 172X ^^ \D 表示任何东西*但*一个数字(0-9)。让我们选择X 1\d2\D2 -> 172X2 ^ 2 表示字面数字 2。
所以172X2
会匹配1\d2\D2
你的下一个 - ^a\w+z$
- 可以有多个长度:
^a\w+z$ ^ 这意味着我们需要在一行的开头(我们是,所以这很酷) ^a\w+z$ -> 一个 ^ a 表示文字字母 a ^a\w+z$ -> a4 ^^ \w 表示数字、字母或“_”。让我们选择4。 ^a\w+z$ -> a4 ^ + 表示如果我们愿意,我们可以回到左边的任何地方,所以让我们这样做...... ^a\w+z$ -> a4Q ^^ \w 表示数字、字母或“_”。让我们选择Q。 ^a\w+z$ -> a4Q ^ + 表示如果我们愿意,我们可以回到左边的任何地方,所以让我们这样做...... ^a\w+z$ -> a4Q1 ^^ \w 表示数字、字母或“_”。让我们选择1。 ^a\w+z$ -> a4Q1 ^ + 表示我们可以返回左边的任何东西,但现在让我们停下来 ^a\w+z$ -> a4Q1z ^ z 表示文字字母 z ^a\w+z$ -> a4Q1z ^ $ 表示我们必须在行尾,并且我们是(因此不能添加更多)
所以a4Q1z
将匹配^a\w+z$
. 也会a4z
(你可以检查...)
请注意,*
就像+
您可以向后跳并重复一样,但这也意味着您可以完全跳过左边的内容(换句话说,+
意思是“至少重复一次”,但*
意思是“重复零次或多次”(“零”是跳过))。
更新:
[abc]
表示选择或中a
的任何一个。b
c
x{2,3}
表示增加x
2 到 3 次(类似+
但有次数限制)。所以,xx
或xxx
。
\1
有点复杂。您需要找到第一组(因为数字 1)括号内的内容并添加。因此,例如,(\d+)\1
如果2323
您从左到右工作并23
选择(\d+)
.
要生成一些匹配的样本,可能会解析正则表达式并将正则表达式的每个块发送到您要编写的函数,例如getRandomSatisfyingText
. 多次调用它,直到你得到 3 个唯一的字符串。在您开始支持原子断言(前瞻和后瞻)之前,这可能不会太难。