regex 如何在关键字处将字符串拆分为块,同时保留要拆分的单词的间距和条件?[关闭]

7ajki6be  于 2023-03-31  发布在  其他
关注(0)|答案(1)|浏览(122)

已关闭。此问题需要details or clarity。当前不接受答案。
**想要改进此问题?**添加详细信息并通过editing this post阐明问题。

7天前关闭。
Improve this question
我想把一个输入字符串拆分成块。拆分应该发生在我们命中city_list中的一个单词时(例如city_list =['Berlin']),并包括接下来的四个单词(空格和特殊字符不会对计数产生影响,但应该包括在内)。重要的参数是city_list中的单词必须总是在一个块的开头;拆分只能在空格上进行,而不能在单词内进行;输出中必须保留所有格式(所有空格、标点符号、特殊字符、\r\n等);并且其中具有来自cities_list的字符串的块必须在块中具有至少4个字(如果需要,其他块可以具有更少的字)。
例如:

# Input string
test2 = '                                            Department of Medical Affairs\r\n                                            North Louisiana Health Care System\r\n                                            500 Lancaster Rd \r\n                                            Berlin, TX 7526\r\n'
# Desired output
output2 = [
  '                                            ',
  'Department of Medical Affairs\r\n',
  '                                            ',
  'North Louisiana Health Care System\r\n',
  '                                            ',
  '500 Lancaster Rd \r\n',
  '                                            ',
  'Berlin, TX 7526\r\n'
]
# Output of ''.join(output2): '                                            Department of Veterans Affairs\r\n                                            North Texas Health Care System\r\n                                            500 Lancaster Rd \r\n                                            Berlin, TX 7526\r\n'

# So test2 == ''.join(output2) yields True

这一切的意义在于能够展望未来后的城市(例如,柏林)查看是否有州或其他位置指示符在其前面几个字内列出,并编辑城市名称(我已经有了一个处理这个问题的函数)。我不能一次搜索整个字符串中的“柏林”,因为我需要逐个处理这个词的每一次出现(例如,可能有一个名为“Cornelius”的城市和一个名为“Cornelius”的人,因此将city关键字周围的字符串分块将有助于为每个情况提供上下文)。
这里有一个尝试;当我测试它的时候,我总是得到一个索引错误。我知道为什么,但不知道如何修复它。
一个一个三个一个一个一个一个一个四个一个一个一个一个一个五个一个

hc8w905p

hc8w905p1#

我看了一下你的代码,你似乎遇到了将result作为2D数组使用的陷阱,尽管你只将它定义为1D数组。至少这就是错误输出的生成方式。
这里有一个解决方案,我认为你正在尝试去:

def splitByCity(text,citylist):
    # split text into words
    wordlist = text.split()
    result = []
    # variable for keeping track of last chunk and a counter
    currentChunk = ""
    c = 0
    inWordList = True
    dontPrint = False
    while inWordList == True:
        for city in citylist:
            if (wordlist[c] == city):
                result.append(currentChunk)
                # Get next 4 words ONLY if there are words to spare
                if (len(wordlist) - c - 1) > 4:
                    currentChunk = ''
                    # Change below number from 4 to higher number to increase chunk length of found instances
                    for i in range(4):
                        currentChunk += wordlist[c + i] + " "
                    result.append(currentChunk)
                    c = c + 4
                    currentChunk = ''
                else:
                    dontPrint = True
                    currentChunk = wordlist[c] + ' '
                
        if (dontPrint == False):
            currentChunk += (wordlist[c] + ' ')
        else:
            dontPrint = False
        c = c + 1
        if (len(wordlist) - c) < 2:
            inWordList = False

    currentChunk += wordlist[c]
    result.append(currentChunk)
    
    return result

下面是两个城市的输出代码示例:

text = "Hi I am a highly suspicious official that has come in from Berlin to experience the harsh winters here, not in Moscow though I am a"
citylist = ["Berlin","Moscow"]
print(splitByCity(text,citylist))

输出为:

['Hi I am a highly suspicious official that has come in from ', 'Berlin to experience the ', 'harsh winters here, not in ', 'Moscow though I am a']

我认为对于你的边界情况可能会有一些细微的差异,但我认为无论如何它都应该工作。

相关问题