【问题标题】:Finding all possible substrings within a string. Python Regex查找字符串中所有可能的子字符串。 Python 正则表达式
【发布时间】:2014-02-26 02:25:11
【问题描述】:

我想在一个字符串中找到所有可能的子字符串,满足以下要求:子字符串以 N 开头,下一个字母不是 P,下一个字母是 S 或 T

使用测试字符串"NNSTL",我想得到结果"NNS" and "NST"

正则表达式可以做到这一点吗?

【问题讨论】:

标签: python regex string


【解决方案1】:

试试下面的正则表达式:

N[^P\W\d_][ST]

第一个字符是 N,下一个字符不是 (^) P、非字母 (\W)、数字 (\d) 或下划线 (_)。最后一个字母是 S 或 T。我假设第二个字符必须是字母。

编辑

上面的正则表达式只会匹配字符串"NNSTL"中的第一个实例,因为它会在位置3开始下一个潜在匹配:"TL"。如果您确实想要同时获得两个结果,请使用以下命令:

(?=(N[^P\W\d_][ST])).

子字符串将在第 1 组中,而不是整个模式匹配,后者仅是第一个字符。

【讨论】:

  • @rodrigovz 酷!想要将其标记为正确答案?
  • 每个答案的左边应该有一个大勾号。点击我旁边的那个!谢谢!
【解决方案2】:

你可以用 re 模块做到这一点:

import re

这是一个可能的搜索字符串:

my_txt = 'NfT foo NxS bar baz NPT'

所以我们使用正则表达式首先查找 N、除 P 之外的任何字符以及 S 或 T 的字符。

regex = 'N[^P][ST]'

并使用re.findall:

found = re.findall(regex, my_txt)

发现返回:

['NfT', 'NxS']

【讨论】:

    【解决方案3】:

    是的。正则表达式 sn-p 是:"N[^P][ST]"

    从这里将其插入任何正则表达式模块方法:http://docs.python.org/2/library/re.html

    解释:

    • N 匹配文字“N”。
    • [^P] 是一个集合,其中插入符号 ("^") 表示逆(因此,它匹配集合中不存在的任何内容。
    • [ST] 是另一个集合,它匹配“S”或“T”。

    【讨论】:

    • ...除非您实际运行它,否则它会返回 ['NNS'](没有“NST”)。
    • 对。 CJ Dennis 似乎使用前瞻断言得到了正确答案。
    猜你喜欢
    • 2016-05-16
    • 1970-01-01
    • 1970-01-01
    • 2011-10-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多