【问题标题】:Matching placeholders in Python在 Python 中匹配占位符
【发布时间】:2016-06-28 08:28:09
【问题描述】:

我有一组短语,我在一段文本中检查它们。

“尽快”形式的简单短语很容易检查,如下所示:

if phrase in text:
    ...

我也有“a {JJ} amount of”形式的短语,其中 JJ 是任何形容词的占位符。所以基本上,如果文本包含“a small amount of”之类的内容,则存在“a {JJ} amount of”这个短语。

如何匹配这种形式的模式?

【问题讨论】:

  • 也许是一个正则表达式? r'a \w+ amount of'?
  • 谢谢,但我不确定是否可以。我有数百个带有类似占位符的短语,我正在寻找一种非特定的方式来处理它们。
  • 您是否需要确定一个词是否为形容词?因为那是一个更困难的问题。
  • 所以你有这些短语在'a {JJ} amount of'形式的文件中?然后您可以按照建议使用正则表达式,只需将{JJ} 替换为w+
  • 好的,我刚刚研究了动态生成正则表达式,结果你的解决方案完美运行。谢谢!

标签: python string parsing nlp


【解决方案1】:

可以使用正则表达式来完成。对于您的示例,您可以执行以下操作:

re.findall(r"a\s\w+?\samount of", text)

这将返回示例中给出的短语的所有实例。 \s\w+?\s 将匹配单个单词,因此如果您需要更改模式,您可以简单地修改周围的单词。您只需执行phrase.replace("{JJ}", r"\s\w+?\s") 之类的操作即可从短语大纲中找到模式

【讨论】:

  • 你的意思是\b 而不是\s?后者匹配空格,而不是单词边界。
  • @DanielRoseman 不,\b 在这里没有意义。例如,我不想匹配“a small. amount of”。在这种情况下,空间确实是唯一有意义的词边界。
  • 但是这个表达式不会匹配“a small amount of”,因为现在你需要两个空格。而\w 无论如何只匹配字母数字字符,所以不会匹配“.”。
  • \b 本质上是 \W。这不是我想要的。但你是对的,我有多余的空间。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-04-08
  • 1970-01-01
  • 2019-10-14
  • 2018-10-21
  • 2017-10-03
  • 2015-03-21
  • 2012-08-24
相关资源
最近更新 更多