我尝试学习python3,并且我正常堆栈与正则表达式。我为此研究了HOWTO,但我不太了解。这页
1\d2\D2
^a\w+z$
答案 0 :(得分:9)
您可以通过阅读表达式并逐步选择适当的字符来生成示例字符串。
例如,1 \ d2 \ D2:
1\d2\D2 -> 1 ^ 1 means a literal number 1 1\d2\D2 -> 17 ^^ \d means any digit (0-9). let's choose 7. 1\d2\D2 -> 172 ^ 2 means a literal number 2. 1\d2\D2 -> 172X ^^ \D means anything *but* a digit (0-9). let's choose X 1\d2\D2 -> 172X2 ^ 2 means a literal number 2.
因此172X2
匹配1\d2\D2
您的下一个 - ^a\w+z$
- 可以有多种长度:
^a\w+z$ ^ this means we need to be at the start of a line (and we are, so that's cool) ^a\w+z$ -> a ^ a means a literal letter a ^a\w+z$ -> a4 ^^ \w means a digit, letter, or "_". let's choose 4. ^a\w+z$ -> a4 ^ + means we can return to whatever is to the left, if we want, so let's do that... ^a\w+z$ -> a4Q ^^ \w means a digit, letter, or "_". let's choose Q. ^a\w+z$ -> a4Q ^ + means we can return to whatever is to the left, if we want, so let's do that... ^a\w+z$ -> a4Q1 ^^ \w means a digit, letter, or "_". let's choose 1. ^a\w+z$ -> a4Q1 ^ + means we can return to whatever is to the left, but now let's stop ^a\w+z$ -> a4Q1z ^ z means a literal letter z ^a\w+z$ -> a4Q1z ^ $ means we must be at the end of the line, and we are (and so cannot add more)
所以a4Q1z
将由^a\w+z$
匹配。那样a4z
(你可以检查......)
请注意,*
与+
类似,您可以跳回并重复,但也这意味着您可以完全跳过左边的内容(换句话说) ,+
表示“至少重复一次”,但*
表示“重复零或更多”(“零”是跳过))。
更新:
[abc]
表示选择a
,b
或c
中的任何一个。
x{2,3}
表示添加x
2至3次(例如+
但限制次数)。所以,xx
或xxx
。
\1
有点复杂。你需要找到第一个(因为数字1)括号内的内容并添加它。因此,例如,如果您从左到右工作,(\d+)\1
将匹配2323
,并为23
选择(\d+)
。
答案 1 :(得分:0)
要生成一些匹配的样本,可能会解析正则表达式并将正则表达式的每个块发送到您将编写的函数getRandomSatisfyingText
。多次调用它,直到你得到3个独特的字符串。在你开始支持原子断言(前瞻和后方)之前,这可能不会太难。