[英]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.