【问题标题】:Regex search find before and after query正则表达式搜索在查询之前和之后查找
【发布时间】:2013-06-20 19:26:41
【问题描述】:

所以我有这个序列,我正在尝试使用正则表达式的搜索功能来查找查询发生之前的区域和之后的区域。

这就是我所拥有的

sequence = 'abcdefghijklmnopqrstuvwxyz'
query = 'jklmnop'

这就是我想要的结果

before = 'abcdefghi'
after = 'qrstuvwxyz'

我尝试过之前的,但它不起作用。我认为这会将其分为 3 组

sequence = 'abcdefghijklmnopqrstuvwxyz'
query = 'jklmnop'
print re.search('\w+(query)\w+',sequence).group(0)
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    AttributeError: 'NoneType' object has no attribute 'group'

【问题讨论】:

    标签: python regex search regex-group


    【解决方案1】:

    在字符串中写入query 不会在该字符串中存储query 的值,它只是创建一个包含字符串“查询”的新字符串。

    >>> print '\w+(query)\w+'
    \w+(query)\w+
    

    你应该使用字符串格式:

    >>> sequence = 'abcdefghijklmnopqrstuvwxyz'
    >>> query = 'jklmnop'
    >>> '(\w+)({})(\w+)'.format(query)
    '(\\w+)(jklmnop)(\\w+)'
    
    >>> re.search('(\w+)({})(\w+)'.format(query),sequence).group(1)
    'abcdefghi'
    >>> re.search('(\w+)({})(\w+)'.format(query),sequence).group(3)
    'qrstuvwxyz'
    

    最好将re.split 用于此类目的:

    >>> strs = 'abcdefghijklmnopqrstuvwxyz'
    >>> import re
    >>> before, after = re.split('jklmnop',strs)
    >>> before
    'abcdefghi'
    >>> after
    'qrstuvwxyz'
    

    【讨论】:

    • 谢谢,这是一个很好的解释,但格式对 {} 有什么作用?
    • @draconisthe0ry {} 是一个占位符,它指定传递给format() 的参数值将在字符串中存储(替换)的位置。看一些例子:docs.python.org/2/library/string.html#format-examples
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-04-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多