【问题标题】:Split hyphen separated words with spaces in between | Python分割连字符分隔的单词,中间有空格 | Python
【发布时间】:2019-11-23 05:10:52
【问题描述】:

我想拆分逗号、分号或连字符(前面有空格)分隔的单词。
其原因是我使用Scrapy 抓取的网站结构不一致。
到目前为止,我可以使用以下代码拆分逗号或分号分隔的单词:

for i in response.xpath('//meta[@name="keywords"]/@content').extract():
        if ',' or ';' in i:
            for k in i.split(',') or i.split(';'):
                keywords.append([k.strip()])
        else:
            keywords.append([i.strip()])

如果单词是分开的,那就行了:

  • 关键字1、关键字2、关键字3
  • 关键字1;关键字2;关键字3

但有时关键字也存储如下:

关键字1 - 关键字2 - 关键字3

我不知道如何正确拆分它们,因为连字符之间的空格让我头疼:)。非常感谢您的帮助!

【问题讨论】:

  • the spaces in between the hyphens are... - 他们是如何给你带来问题的? - 你应该在你的问题中更明确地说明这一点。
  • 起初我认为 Python 无法通过简单地添加一个空格来识别空格,例如 ' - '。所以,我想我需要指定我的代码中有一个空格。但正如我刚才在下面发布的那样,我可以简单地通过使用 elif 语句来解决它。

标签: python scrapy


【解决方案1】:

您可能想要使用正则表达式。 re.split('\s*-\s*', mystring) 应该可以完成这项工作。

【讨论】:

    【解决方案2】:

    你试过了吗:

    "keyword1 - keyword2 - keyword3".split(' - ')
    #  ['keyword1', 'keyword2', 'keyword3']
    
    

    【讨论】:

    • 能发一下网址吗,我看看,没关系
    • 感谢您抽出宝贵时间查看。但正如我刚刚发布的那样,我可以用一种不同且非常简单的方式来解决问题。通过尝试使用“或”语句在我的代码中犯了一个错误。 “elif”语句是解决方案。
    • @Dan,很好。你应该使用你自己的问题选项的答案,我会 +1 它。
    【解决方案3】:

    您可能想查看regular expressions

    import re
    
    lines = """keyword1, keyword2, keyword3
    keyword1; keyword2; keyword3
    keyword1 - keyword2 - keyword3
    """.splitlines()
    
    delim = re.compile(r'\s*[-,;]\s+')
    for line in lines:
        print(delim.split(line))
    

    【讨论】:

      【解决方案4】:

      你可以先使用 strip() 再尝试拆分

      "keyword1 - keyword2 - keyword3".strip().split(' - ')
      

      【讨论】:

        【解决方案5】:

        我在原始问题中发布的代码似乎有问题。因此,连字符之间的空格并没有真正的问题,我可以通过使用 elif 语句简单地解决问题,如下所示:

        for i in response.xpath('//meta[@name="keywords"]/@content').extract():
                if ',' in i:
                    for k in i.split(','):
                        keywords.append([k.strip()])
                elif ';' in i:
                    for k in i.split(';'):
                        keywords.append([k.strip()])
                elif ' – ' in i:
                    for k in i.split(' – '):
                        keywords.append([k.strip()])
                else:
                    keywords.append([i.strip()])
        

        无论如何,感谢大家对解决此问题的建议。

        【讨论】:

          【解决方案6】:

          您可以简单地用空白替换所有让您头疼的特殊字符,然后将其拆分。

          import re
          string = "keyword - keyword; keyword,keyword-keyword"
          re.sub("[-;,]", " ", string).split()
          

          输出:

          ['keyword', 'keyword', 'keyword', 'keyword', 'keyword']
          

          【讨论】:

            【解决方案7】:

            Data.replace(' - ','; ') 将用连字符和每边一个空格分隔的所有关键字替换为用分号和一个空格分隔的关键字。将其添加到 if 语句之前的代码中,您应该一切顺利。

            代码:

            data = ['Keyword1 - Keyword2 - Keyword3','Keyword4 - Keyword5']
            
            final = [item.replace(" - ", "; ") for item in data]
            
            print(final)
            

            输出:

            ['Keyword1; Keyword2; Keyword3', 'Keyword4; Keyword5']
            

            【讨论】:

              猜你喜欢
              • 2010-12-01
              • 1970-01-01
              • 2017-03-25
              • 2017-06-07
              • 1970-01-01
              • 1970-01-01
              • 2012-02-14
              • 2023-03-11
              • 2021-06-12
              相关资源
              最近更新 更多