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")
)
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")
)
我认为你必须拆分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 的答案。
使用正则表达式模块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']
您可以尝试定义一个函数,如:
def split_on_extensions(string, *extensions):
for ext in extensions:
if ext in string:
return string.split(ext)
return string
当然,您提供扩展名的顺序很关键,因为您将在第一个...
你能保证他们两个中的一个会在那里吗?
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 #????
标签被捕获到第一个反向引用中。中的问号regex
使星星变得懒惰,以确保它在第一个结束标记之前停止,而不是在最后一个结束标记之前停止,就像贪婪的星星会做的那样。
此正则表达式将无法正确匹配嵌套在自身内部的标签,例如在<TAG>one<TAG>two</TAG>one</TAG>
.
另一种选择是使用 BIF 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')
把它放到一个小函数和你的集合中。
您可以迭代分隔符:
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 = []