【问题标题】:python regex - no match in script, although it shouldpython regex - 脚本中不匹配,尽管它应该
【发布时间】:2016-12-10 19:22:32
【问题描述】:

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

这个问题可能是由实际的python解释器引起的吗? 我想不出任何其他问题...

感谢您的帮助

sn-p 代码如下:

        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:
                   ...

【问题讨论】:

  • 能否请您张贴您要匹配的文本的 sn-p?这将更容易找出问题。
  • 如果您可以发布一些需要打印的示例字符串,那将会很有帮助

标签: python regex


【解决方案1】:

试试这个:

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

【讨论】:

  • 据我了解,您想替换所有包含“{”的值。 ?
  • 所以,在一个非常简化的场景中,一个词条看起来像这样: {meta, meaning} context [reference for context]。
【解决方案2】:

试试这个

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

DEMO

【讨论】:

    【解决方案3】:

    所以,在一个非常简化的场景中,词条看起来像这样:

    “标题”{元,含义}上下文[上下文参考]。

    所以,我用正则表达式将 [...] 处的条目分块 (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 armen das gebührende vorenthält} [Renn.]”
    该算法找到第一个,说这个词是一个名词,但第二个,它的翻译,没有被识别。 ...这是中世纪的德国人,对不起!感谢您的所有帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-03-12
      • 1970-01-01
      • 2019-12-07
      • 1970-01-01
      • 2011-04-08
      • 1970-01-01
      • 2016-03-02
      • 2017-03-04
      相关资源
      最近更新 更多