在第n次出现后删除其余的字符串

时间:2016-01-31 03:14:51

标签: python regex string python-2.7 python-2.x

我有以下字符串:

a = "this.is.a.string"

我希望删除第3个'之后的所有内容。'符号,以便它返回

trim(a)
>>> "this.is.a"

而没有第3个字符串的字符串。'应该归还。

这个答案(How to remove all characters after a specific character in python?)是我能找到的最接近的解决方案,但我不认为split这次会帮助我。

4 个答案:

答案 0 :(得分:10)

dot然后.split()

.join()

>>> ".".join(a.split(".")[:3])
'this.is.a'

您也可以指定maxsplit参数,因为您只需要3"切片":

  

如果给出maxsplit,则最多maxsplit次分割已完成(因此,该列表最多只有maxsplit+1个元素。)

>>> ".".join(a.split(".", 3)[:-1])
'this.is.a'

答案 1 :(得分:2)

@alecxe 的答案就足够了,但是,你问

  

在第n次出现后删除其余的字符串

要做到这一点,你可以做到

def removeAfterN(yourStr, nth, occurenceOf):
    return occurenceOf.join(yourStr.split(occurenceOf)[:nth])

yourStr是您的字符串,nth是出现的位置(在您的示例中,它是3),而occurenceOf.来自>>> removeAfterN("this.is.a.string",3,".") 'this.is.a' 你的榜样。

public class CourseGradePrinter {
    public static void main(String[] args) {
        final int NUM_VALS = 4;
        int[] courseGrades = new int[NUM_VALS];
        int i = 0;

        courseGrades[0] = 7;
        courseGrades[1] = 9;
        courseGrades[2] = 11;
        courseGrades[3] = 10;

        for (i = 0; i < NUM_VALS; i++) {
            System.out.print(courseGrades[i] + " ");
        }

        for (i = NUM_VALS - 1; i > NUM_VALS; --i) {
            System.out.print(courseGrades[i] + " ");
        }
        return;
    }
}

答案 2 :(得分:1)

你可以在这里使用简单的正则表达式和sub

import re

print re.sub(r'\.a.*$', '.a', a)

\.a表示符号.a

.*$意味着一切直到最后

或简单replace

a.replace('.string','')

使用re的更常见解决方案可能是:

print re.sub(r'(^[a-z]+\.[a-z]+)\..*$', '\g<1>', a)

我们正在使用.对每个部分进行分组并对第三部分进行分组。

[a-z]+ - 表示不止一个字母

\..*$表示从第二个.到结尾

的所有内容

\g<1>表示对第一组()

的群组引用

有关正则表达式语法的更详细说明,您可以找到here

答案 3 :(得分:-1)

def trim(s):
    count = 0
    for i in range(len(s)):
        if s[i] == '.'
             if count == 2
                  s = s[:i]
                  break
             count += 1