簡體   English   中英

在不使用正則表達式的可能定界符列表之后剝離所有內容

[英]Strip everything after list of possible delimiters without regex

我有一個可能的分隔符列表。 我正在處理幾千個字符串,並且需要在找到一個分隔符后剝離所有內容。 注意:字符串中決不能超過1個分隔符。

例:

patterns = ['abc', 'def']
example_string = 'hello world abc 123'

如果在這種情況下example_string是輸入,則輸出應為hello world abc

我目前正在使用正則表達式作為解決方案,該解決方案正在運行,但是我想使用一種不使用正則表達式的方法。 這是我當前的實現:

 regex = r'(.*)(' + '|'.join(patterns) + r')(.*)'
 example_string= re.sub(regex, r'\1\2', example_string).lstrip()

我正在考慮一些搜索方式,以查看是否有來自模式的定界符之一在字符串中,然后從定界符的長度位置到字符串的末尾對字符串進行索引。

不確切知道這是否是實現該目標的好方法,或者是否可行。

您可以使用查找功能。 此處檢查每個模式,如果找到,則在模式的開始位置(或通過添加模式的長度,如示例中所示,在模式的結束位置)對字符串進行切片:

    patterns = ['abc', 'def']
    example_string = 'hello world abc 123'
    for pattern in patterns:
        location = example_string.find(pattern)
        if location >= 0:
            example_string = example_string[:location + len(pattern)]
            print example_string
            break

您可以濫用列表理解和切片:

delimiters = ['a', 'b']
s = 'nvcakl'
s = [s[:s.index(i) + 1] for i in delimiters if i in s]
print(s)
>> ['nvca']

即使找到了多個定界符,這也將起作用,輸出列表中的每個索引將對應於找到的定界符,例如:

delimiters = ['a', 'b']
s = 'nvcaklbh'
s = [s[:s.index(i) + 1] for i in delimiters if i in s]
print(s)
>> ['nvca', 'nvcaklb']

使用查找方法

string.find(s,sub [,start [,end]])

返回s中找到子字符串sub的最低索引,以使sub完全包含在s [start:end]中。 失敗時返回-1。 開始和結束以及負值的解釋的默認值與切片相同。

而你的結果是s [:end]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM