2017-09-23 103 views
1

我知道已經有關於這個問題已經有幾個問題,但沒有幫我解決我的問題......的Python:sre_constants.error的錯誤:無與倫比的組

我,當他們到CSV文件中替換名稱請遵循標籤{SPEAKER}或{GROUP OF SPEAKERS}。不過,我收到以下錯誤信息:

File "/usr/lib/python2.7/re.py", line 291, in filter 
    return sre_parse.expand_template(template, match) 
    File "/usr/lib/python2.7/sre_parse.py", line 831, in expand_template 
    raise error, "unmatched group" 
sre_constants.error: unmatched group 

我的劇本的部分是:

list_speakers = re.compile(r'^\{GROUP OF SPEAKERS\}\t(.*)|^\{SPEAKER\}\t(.*)') 

usernames = set() 
for f in corpus: 
    with open(f, "r", encoding=encoding) as fin: 
     line = fin.readline() 
     while line: 
      line = line.rstrip() 
      if not line: 
       line = fin.readline() 
       continue 

      if not list_speakers.match(line): 
       line = fin.readline() 
       continue 

      names = list_speakers.sub(r'\1', line) 
      names = names.split(", ") 
      for name in names: 
       usernames.add(name) 

      line = fin.readline() 
+0

嘗試'r'^ \ {{(?:演講者組合|演講者)\} \ t(。*)'' –

+0

奇妙地工作!非常感謝你 !! – Lili

+0

我發佈了一個答案,請考慮upvoting /接受。 –

回答

1

issue is a known one:如果未初始化的組,反向引用未設置爲空字符串Python版本高達3.5。

您需要確保只有一個或使用lambda表達式作爲實現自定義替換邏輯的替換參數。

在這裏,你可以很容易地revampt正則表達式與一個捕獲組的模式:

r'^\{(?:GROUP OF SPEAKERS|SPEAKER)\}\t(.*)' 

regex demo

詳細

  • ^ - 開始串
  • \{ - 一個{
  • (?:GROUP OF SPEAKERS|SPEAKER) - 非捕獲組匹配任一GROUP OF SPEAKERSSPEAKER
  • \} - 一個}(也可以寫},它不需要逸出)
  • \t - 標籤炭
  • (.*) - 第1組:除換行符之外的任何0+字符,儘可能多(該行的其餘部分)。
+0

但是,我現在遇到了「names = list_speakers.sub(r'\ 1',line)行」的問題,您是否知道爲什麼會引發此問題? – Lili

+0

@莉莉那條線的問題是什麼?究竟發生了什麼? –

+0

我解決了它,一個愚蠢的錯誤:我必須修改一點正則表達式,我沒有注意到組的數量,因此有「空」組,並且它不工作......無論如何謝謝! – Lili