【问题标题】:Parsing Korean text into a list using regex使用正则表达式将韩文文本解析为列表
【发布时间】:2019-01-25 10:08:02
【问题描述】:

我有一些数据存储为 pandas 数据框,其中一列包含韩语文本字符串。我想按如下方式处理每个文本字符串:

my_string = '모질상태불량(피부상태불량, 심하게 야윔), 치석심함, 양측 수정체 백탁, 좌측 화농성 눈곱심함(7/22), 코로나음성(활력저하)'

进入这样的列表:

parsed_text = '모질상태불량, 피부상태불량, 심하게 야윔, 치석심함, 양측 수정체 백탁, 좌측 화농성 눈곱심함(7/22), 코로나음성, 활력저하'

所以问题是识别一个单词(或几个单词)后跟仅带有文本的括号的情况(可以是一个单词或用逗号分隔的几个单词)并将它们替换为所有单词(括号之前和括号内)用逗号分隔(供以后处理)。如果一个单词后跟包含数字的括号(如本例中的 7/22),则应保持原样。如果一个词后面没有任何括号,它也应该保持原样。此外,我想保留单词的顺序(因为它们出现在原始字符串中)。

我可以使用正则表达式提取括号中的文本,如下所示:

corrected_string = re.findall(r'(\w+)\((\D.*?)\)', my_string)

产生这个:

[('모질상태불량', '피부상태불량, 심하게 야윔'), ('코로나음성', '활력저하')] 

但是我在创建结果字符串时遇到了困难,即用我匹配的模式替换我的原始文本。有什么建议么?谢谢。

【问题讨论】:

  • 试试this approachrx = r'(\w+\([\d/]*\))|(\()|\)'def repl(m): if m.group(1): return m.group(1) elif m.group(2): return ", " else: return ""re.sub(rx, repl, s)
  • 为什么不回答呢?
  • @Rahul 因为它遵循不同的逻辑。如果它有效,我会发布。

标签: python regex replace pattern-matching cjk


【解决方案1】:

您可以将re.findall 与可选匹配括号中的数字的模式一起使用:

corrected_string = re.findall(r'[^,()]+(?:\([^)]*\d[^)]*\))?', my_string)

【讨论】:

  • 这个太完美了!谢谢。
【解决方案2】:

有点笨拙,但你可以试试:

my_string_list = [x.strip() for x in re.split(r"\((?!\d)|(?<!\d)\)|,", my_string) if x]
# you can make string out of list then.

【讨论】:

  • 谢谢。效果很好!我很感激。只有一件事,当你查看结果列表中的第三个单词时,它把右括号留在了里面。
  • 这只是为了您的理解。你需要从这里开始工作。另请参阅 Wiktor Stribiżew 的方法。
  • @Rahul 谢谢,Rahul。
猜你喜欢
  • 2016-04-27
  • 1970-01-01
  • 1970-01-01
  • 2015-10-10
  • 2013-08-13
  • 1970-01-01
相关资源
最近更新 更多