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

4

7 回答 7

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 的答案。

于 2012-09-26T12:32:21.663 回答
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']
于 2012-09-26T12:34:27.993 回答
1

您可以尝试定义一个函数,如:

def split_on_extensions(string, *extensions):
    for ext in extensions:
        if ext in string:
            return string.split(ext)
    return string

当然,您提供扩展名的顺序很关键,因为您将在第一个...

于 2012-09-26T12:35:41.870 回答
0

你能保证他们两个中的一个会在那里吗?

a = next( string.split(v) for v in ('.gds','.cdl') if v in string )

如果你不肯定它会在那里,你可以捕捉到StopIterationnext

try:
    a = next( string.split(v) for v in ('.gds','.cdl') if v in string )
except StopIteration:
    a = string #????
于 2012-09-26T12:37:44.760 回答
0

标签被捕获到第一个反向引用中。中的问号regex使星星变得懒惰,以确保它在第一个结束标记之前停止,而不是在最后一个结束标记之前停止,就像贪婪的星星会做的那样。

此正则表达式将无法正确匹配嵌套在自身内部的标签,例如在<TAG>one<TAG>two</TAG>one</TAG>.

于 2012-09-26T12:46:04.893 回答
0

另一种选择是使用 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')

把它放到一个小函数和你的集合中。

于 2012-09-26T13:25:04.693 回答
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 = []
于 2012-09-27T07:11:11.327 回答