string= "im fine.gds how are you"
if '.gds' or '.cdl' in string :
a=string.split("????????")
上述字符串可能包含.gds
或.cdl
扩展名。我想根据扩展名拆分字符串。
这里如何将参数传递给分割函数。( EX 如果.gds
存在于字符串中那么它应该作为split(".gds")
如果.cdl
在字符串中,那么它应该得到split(".cdl")
)
答案 0 :(得分:6)
我认为您必须拆分if
语句:
if '.gds' in string:
a = string.split('.gds')
elif '.cdl' in string:
a = string.split('.cdl')
else:
a = string # this is a fallback in case none of the patterns is in the string
此外,您的in
声明不正确;应该是
if '.gds' in string or '.cdl' in string:
请注意,此解决方案假定只有一个模式位于字符串中。如果两个模式都出现在同一个字符串上,请参阅Vikas的答案。
答案 1 :(得分:5)
使用正则表达式模块re
按pattern1
或pattern2
分割
import re
re.split('\.gds|\.cdl', your_string)
示例:
>>> re.split('\.gds|\.cdl', "im fine.gds how are you")
['im fine', ' how are you']
>>> re.split('\.gds|\.cdl', "im fine.cdl how are you")
['im fine', ' how are you']
>>> re.split('\.gds|\.cdl', "im fine.cdl how are.gds you")
['im fine', ' how are', ' you']
答案 2 :(得分:1)
您可以尝试定义如下函数:
def split_on_extensions(string, *extensions):
for ext in extensions:
if ext in string:
return string.split(ext)
return string
当然,您提供扩展程序的顺序至关重要,因为您将拆分第一个... ...
答案 3 :(得分:0)
你能保证他们中的哪一个会在那里吗?
a = next( string.split(v) for v in ('.gds','.cdl') if v in string )
如果您不肯定,那么您可以抓住StopIteration
中提出的next
:
try:
a = next( string.split(v) for v in ('.gds','.cdl') if v in string )
except StopIteration:
a = string #????
答案 4 :(得分:0)
标签被捕获到第一个反向引用中。 regex
中的问号使得明星变得懒惰,以确保它在第一个结束标记之前停止,而不是在最后一个标记之前停止,就像贪婪的明星一样。
此正则表达式无法正确匹配嵌套在其自身内的标记,例如<TAG>one<TAG>two</TAG>one</TAG>
。
答案 5 :(得分:0)
另一种选择是使用BIG str.partition。这是它的工作原理:
sring= "im fine.gds how are you"
three_parts_of_sring = sring.partition('.gds')
>>> three_parts_of_sring
('im fine', '.gds', ' how are you')
将它放入一个小功能和你的设置。
答案 6 :(得分:0)
你可以分离器:
string= "im fine.gds how are you"
separators = ['.gds', '.cdl']
for separator in separators:
if separator in string:
a = string.split(separator)
break
else:
a = []