【问题标题】:Python Regex Find Word with Random White Space Mixed inPython Regex 查找混入随机空格的单词
【发布时间】:2020-09-15 11:41:21
【问题描述】:

当字符串在随机位置添加空格时,如何编写正则表达式来匹配字符串中的特定单词?

我有一个从具有表格结构的 pdf 文档中提取的字符串。由于该结构,提取的字符串包含随机插入的新行和空格。我正在寻找的特定单词和短语都以正确的顺序排列,但是用空格随机切碎。例如:“堆栈溢出”。

pdf 文档的内容是使用 PyPDF2 提取的,因为这是我公司的 python 库中唯一可用的选项。

我知道我可以为此编写一个特定的字符串匹配项,每个字符后可能有一个空格,但必须有更好的搜索方法。

这是我一直在尝试做的一个例子。

my_string = "find the ans weron sta ck over flow" 
# r's\s*t\s*a\s*c\s*k\s*'  # etc
my_cleaned_string = re.sub(r's\s*t\s*a\s*c\s*k\s*', '', my_string)

有什么建议吗?

【问题讨论】:

  • “更好”是什么意思?如果您需要在每个字母之间匹配任意数量的空格,这是唯一的方法。
  • 感谢@Wiktor Stribiżew。我希望有一种通配符方法可以接受任意数量的 \s 出现...
  • \s* 是匹配 0 个或多个空格的通配符。
  • 另外,请参阅 stackoverflow.com/questions/4590298/…,这正是 Tim 的回答 here

标签: python regex


【解决方案1】:

其实你正在做的最好的方法。我可以建议的唯一补充是从一个单词动态构造这样的正则表达式:

word = "stack"
regexp = r'\s*'.join(word)
my_string = "find the ans weron sta ck over flow" 
my_cleaned_string = re.sub(regexp, '', my_string)

【讨论】:

    【解决方案2】:

    您可能在这里做的最好的事情就是去除所有空格,然后在去除的文本中搜索目标字符串:

    my_string = "find the ans weron sta ck over flow"
    my_string = re.sub(r'\s+', '', my_string)
    if 'stack' in my_string:
        print("MATCH")
    

    我在上面使用“最佳”的原因是,通常您不会知道空格是实际的单词边界,还是只是插入的随机空格。因此,您实际上只能在剥离的文本中找到目标作为子字符串。请注意,输入文本 'rust acknowledge' 现在将匹配 stack 的正数。

    【讨论】:

      猜你喜欢
      • 2015-07-31
      • 2011-03-28
      • 1970-01-01
      • 1970-01-01
      • 2017-09-10
      • 1970-01-01
      • 1970-01-01
      • 2013-11-09
      • 1970-01-01
      相关资源
      最近更新 更多