\ Z行尾reagex计数发现的内容不在行的绝对末尾

时间:2019-09-10 20:06:35

标签: python regex

我正在尝试查找和计算与较大字符串中的某些字符串匹配的所有内容。在计算字符串结尾处以])或]结尾的字符串时,我遇到了麻烦。 下面的代码示例:

我尝试用$代替\ Z来返回相同的结果。一些搜索使我相信\ z应该只是字符串的最后一个结尾,但是它返回有关意外退出的错误。

    import pandas as pd

    test= {'s':[')-[#8]-[#6]-[#8])-[#7]', '-[#6]-[#8])-[#8]']}
    df = pd.DataFrame(data = test)
    All = df['s'].str.count('-\[#8\]\)|\Z')
    print(All)

我应该使用第一行中的count来计数'-[#8])| \ Z'的1个实例,而我想找到-[#8])或-[#8]时使用第二行的2个实例仅在字符串的末尾而不是-[#8]-。但是我在两行中都找到了2个实例。

2 个答案:

答案 0 :(得分:2)

在模式-\[#8\]\)|\Z中,您将匹配-\[#8\]\)\Z,这两个行将匹配2次。参见demo 1demo 2

您只想在字符串的末尾匹配-[#8])-[#8]。您可以将\)\Z使用alternation

-\[#8\](?:\)|\Z)

Regex demo

答案 1 :(得分:0)

只需使用负边界

-\[\#8\](?![^)])

https://regex101.com/r/t7WDjH/1

解释:

 - \[ \#8 \] 
 (?!              # Below must have either FAILURE for negative assertion
                  # to pass.
                  # =======================================
      [^)]             # Requires a character
                       # -----------------
                       # No-character ahead ? : FAILURE at end of string
                       #     because there is no character.
                       # -----------------
                       # Yes-character ahead ? : FAILURE if the next character is a ')`
                       #     because ')' is not allowed
 )