参数从if条件传递给split函数

时间:2012-09-26 12:30:19

标签: python

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")

7 个答案:

答案 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)

使用正则表达式模块repattern1pattern2分割

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 = []