python正则表达式 - 脚本中没有匹配,尽管它应该

时间:2016-08-04 15:14:46

标签: python regex

我正在编写一个旧字典的解析器,我正在尝试在字符串中找到类似re.findall(“{。*}”,string)的模式。 检查后的控件打印证明,只有少数字符串匹配,尽管所有字符串都包含{...}等模式。 甚至复制字符串并在空闲shell中以交互方式匹配它 给出一个匹配,但在其余的代码中,它根本就没有。

这个问题是否可能是由实际的python解释器引起的? 我无法弄清楚任何其他问题...

感谢您的帮助

代码段看起来像这样:

        for aParse in chunklist:
            aSigle = aParse[1]
            aParse = aParse[0]
            print("to be parsed", aParse)

            aContext = Context()
            aContext._init_("")
            aContext.ID = contextID
            aContext.source = aSigle

            # here, aParse is the string containing {Abriss}
            # which is part of a lexicon entry
            metamatches = re.findall("\{.*\}", aParse)
            print("metamatches: ", metamatches)

            for meta in metamatches:

                aMeta = meta.replace("{", "").replace("}", "")
                aMeta = aMeta.split()

                for elem in aMeta:
                   ...

3 个答案:

答案 0 :(得分:0)

试试这个:

re = {0: "{.test1}",1: "{.test1}",2: "{.test1}",3: "{.test1}"}
for value in re.itervalues():
    if "{" in value:
        value = value.replace("{"," ")
        print value

或者如果你想同时删除" {}“

for value in re.itervalues():
    if "{" in value:
        value = value.strip('{}')
        print value

答案 1 :(得分:0)

试试这个

data=re.findall(r"\{([^\}]*)}",aParse,re.I|re.S)

DEMO

答案 2 :(得分:0)

因此,在一个非常简化的场景中,词汇条目看起来像这样:

  
    

“headword”{meta,意为} context [上下文参考]。

  

所以,我正在使用正则表达式在[...]上分组(split())。到目前为止工作正常。然后,在分隔词条之后,我试图找到带有正则表达式的元/含义,找到{...}形式的所有模式。由于该正则表达式不起作用,我用这个函数替换它:

def findMeta(self, string, alist):
    opened = 0
    closed = 0
    for char in enumerate(string):
        if char[1] == "{":
            opened = char[0]

        elif char[1] == "}":
            closed = char[0]
            meta = string[opened:closed+1]
            alist.append(meta)
            string.replace(meta, "")

现在,它实际上更快,并且正确分析了意义组件。剩下的问题是:我用来查找其他信息的正则表达式有多远(例如,由“s。”引入的正交变体)可靠吗?它们应该工作还是IDLE shell可能无法正确解析1000行程序(并编译所有正则表达式)?实际上应该找到元的字符串的示例是:“{stm。} {der abbruch thut,den armendasgebührendevorenthält} [Renn。]”

算法找到第一个,说这个词是名词,但第二个,它的翻译,是不被识别的。 ......这是中世纪的德国人,对不起!谢谢你的帮助。