正则表达式“分裂”功能

时间:2010-08-18 04:06:11

标签: python regex

我是这个网站的新手,也是Python的新手。

所以我正在学习正则表达式,而我正在研究Google的示例 here

我正在做一个'搜索'示例,但是我将'搜索'更改为'拆分'并稍微更改了搜索模式以便使用它,这就是行

print re.split(r'i', 'piiig')

(请注意文本'piiig'中有3个我')

输出只有2个空格,在那里被拆分。

['p', '', '', 'gs']

只是想知道为什么会给出这个输出。这不是一个现实生活中的问题,并没有任何相关性,但我想我可能会在以后遇到这个并想知道发生了什么。

有人知道发生了什么事吗???

3 个答案:

答案 0 :(得分:6)

如果将i替换为,

,您的示例可能更有意义
print re.split(r',', 'p,,,g')

在这种情况下,通过分割逗号找到四个字段,'p''g'和中间的两个空''

答案 1 :(得分:2)

split删除它找到的实例。两个空白字符串是i s之间的两个空字符串。

如果join使用i作为分隔符将数组重新组合在一起,则会返回原始字符串。

piiig,在这方面是p- i - i - i -g(此处)我正在使用短划线表示空字符串)

答案 2 :(得分:0)

以这种方式思考......(在Java中,因为我在python中不太好)

String       Text     = "piiig";
List<String> Spliteds = new ArrayList<String>();
String       Match    = "";
int  I;
char c;
for (I = 0; I < Text.length; I++) {
    c = Text.charAt(I);
    if (c == 'i') {
        Spliteds.add(Match);
        Match = "";
    } else {
        Match += c;
    }
}
if (Match.length != 0)
    Spliteds.add(Match);

所以当你跑...

 At the end of each loop:
When: (I == 0) => c = 'p'; Match = "p"; Spliteds = {};
When: (I == 1) => c = 'i'; Match =  ""; Spliteds = {"p"};
When: (I == 2) => c = 'i'; Match =  ""; Spliteds = {"p", ""};
When: (I == 3) => c = 'i'; Match =  ""; Spliteds = {"p", "", ""};
When: (I == 4) => c = 'g'; Match = "g"; Spliteds = {"p", "", ""};
At the end of the program:
      (I == 4) => c = 'g'; Match = "g"; Spliteds = {"p", "", "", "g"};

RegEx引擎只是简单地在每个'i'之间找到字符串,这包括'i'在另一个'i'之后的空字符串。

希望这有帮助。