regex Python re模块中令人困惑的示例

nimxete2  于 2023-06-30  发布在  Python
关注(0)|答案(1)|浏览(122)

Python文档:
re.sub(pattern,repl,string,count=0,flags=0)
...
可选参数计数是要替换的模式出现的最大数目; count必须是非负整数。如果省略或为零,则将替换所有匹配项。模式的空匹配仅在不与前一个空****匹配相邻时才被替换,因此sub('x *','-','abxd')返回'-a-b--d-'。
所以x*应该匹配
1.前的空字符串

  1. a和b之间的空字符串
  2. b和x之间的空字符串
    1.子字符串'x'
  3. x和d之间的空字符串
  4. d后面的空字符串
    显然(5)没有被取代,但我不明白为什么。如果我们从上面的粗体文本中删除“空”字,我可以看到(5)不会被替换。但是(5)不与先前的空匹配相邻。
3b6akqbq

3b6akqbq1#

  • "... 3. b和x之间的空字符串..."*

我不相信 bx 之间会有空字符串,因为 x 匹配。
该模式实际上是,“如果x,1或更多,或无”
例如,ab 之间是空白的唯一原因是 b 不是 x

-----------------
characters   | a | b | x | d |
             -----------------
indices      0   1   2   3   4

| 指数|子串|是x|现行串| current string |
| --|--|--|--| ------------ |
| 0到1| a|假的|-abxd| -abxd |
| 1到2| B|假的|-a-bxd| -a-bxd |
| 2比3| x|真的|-a-b-d| -a-b-d |
| 3到4| d|假的|-a-b--d| -a-b--d |
| 4||假的|- a-b-d-| -a-b--d- |

相关问题