0

我有以下代码来匹配转义字符串:

match_str = r'''(["/']).*?(?<!\\)(\\\\)*\1'''
test_str = r'''"This is an \"escaped\" string" and this isn't.'''

mo = re.match(match_str, test_str)

if mo:
    print mo.group()

效果很好。

然而,虽然我知道我需要那里的小组来处理重复等,但我对在比赛后使用小组不感兴趣。我知道我可以打电话mo.group(0)并得到整个事情,但是对于我正在做的事情,如果它可以表现得好像在这种情况下没有找到任何组,那将是有帮助的,即mo.groups()返回(None)

有没有办法做到这一点?

编辑:如果有帮助,我正在尝试做这样的事情:

ma = [myclass("regex1nogroups", [func1]),
      myclass("regex2twogroups", [func2, func3]),
      myclass("regex3fourgroups", [func4, func5, func6, func7]),
      myclass("regex4nogroups", [func8])]

for mc in ma:
    mo = re.match(mc.pattern, str_to_match)
    if mo:
        for n in range(len(mc.funclist)):
            result = mo.group(n+1 if mo.groups() else 0)
            mc.funclist[n](result)

使用函数列表的长度来确定正则表达式应该产生多少组。myclass如果我只想假设没有组,我可以添加一个额外的标志成员,但最好避免这种情况。

4

3 回答 3

3

只需添加,?:您将获得一个非捕获组:

(?:\\\\)
于 2013-05-23T21:10:03.280 回答
0

我最终只是以不同的方式解决了这个问题,并采取了明显的步骤来查看函数列表的长度,而不是查看re.groups()

ma = [myclass("regex1nogroups", [func1]),
      myclass("regex2twogroups", [func2, func3]),
      myclass("regex3fourgroups", [func4, func5, func6, func7]),
      myclass("regex4nogroups", [func8])]

for mc in ma:
    mo = re.match(mc.pattern, str_to_match)
    if mo:
        for n,f in enumerate(mc.funclist):
            result = mo.group(n+1 if len(mc.funclist) > 1 else 0)
            f(result)
于 2013-05-23T21:50:02.917 回答
0

如果要抑制str列表中的组。使用“.str”并替换即:

df.col_str where ".str" able you to apply str methods on the list.

输出 :

2             blabla...Length=45
3             bloblo...Length=44
4          VANILLE ...Length=448
5             fooo 1...Length=44
6             Colori...Length=70

但你想...Length=99用 99 删除任何数字。(48, xx,...) 所以你会使用f'?{your_constant_pattern}[0-9]+'with[0-9]+因为我希望它以任意数字结尾。

使用替换:

df.col_str.str.replace(pat="(?:...Length=[0-9]+)", repl="", regex=True)

输出 :

    2             blabla
    3             bloblo
    4            VANILLE
    5             fooo 1
    6             Colori

或者

df.col_str.replace(to_replace="(?:...Length=[0-9]+)", value="", regex=True, inplace=True)
于 2021-11-10T14:26:42.700 回答