相关疑难解决方法(0)

re.finditer()为start和end方法返回相同的值

我在python中的re.finditer()方法遇到了一些麻烦.例如:

>>>sequence = 'atgaggagccccaagcttactcgatttaacgcccgcagcctcgccaaaccaccaaacacacca'
>>>[[m.start(),m.end()] for m in re.finditer(r'(?=gatttaacg)',sequence)]

out: [[22,22]]
Run Code Online (Sandbox Code Playgroud)

如您所见,start()end()方法给出了相同的值.我之前注意到了这一点,并且最终使用了m.start()+len(query_sequence),而不是m.end(),但我很困惑为什么会发生这种情况.

python regex python-itertools

6
推荐指数
1
解决办法
1205
查看次数

找到两个字符串之间的最短匹配

我有一个大的日志文件,我想在两个字符串之间提取多行字符串:startend.

以下是来自以下的示例inputfile:

start spam
start rubbish
start wait for it...
    profit!
here end
start garbage
start second match
win. end
Run Code Online (Sandbox Code Playgroud)

应打印所需的解决方案:

start wait for it...
    profit!
here end
start second match
win. end
Run Code Online (Sandbox Code Playgroud)

我尝试了一个简单的正则表达式,但它返回了所有内容start spam.该怎么做?

编辑:有关实际计算复杂性的其他信息:

  • 实际文件大小:2GB
  • 发生'开始':~12 M,均匀分布
  • 出现'结束':〜800,靠近文件的末尾.

python regex

4
推荐指数
1
解决办法
1206
查看次数

如何在正则表达式python中获取重叠字符串

我努力了

re.findall(r'(\d\*\*\d)','3*2**3**2*5**4**')
Run Code Online (Sandbox Code Playgroud)

输出是['2**3', '5**4']. 我想要的输出是['2**3','3**2', '5**4']. 重新需要什么改变?

python regex

3
推荐指数
1
解决办法
1112
查看次数

允许 Python re.findall 从左到右查找重叠的数学

我的要求很简单,但我就是不知道如何达到它。

这是原始字符串ACCCTNGGATGTGGGGGGATGTCCCCCATGTGCTCG,我想找出所有仅由 组成[ACGT]、以 结尾ATGT且长度至少为 8 的子字符串。我期望的是:

GGATGTGGGGGGATGT
GGATGTGGGGGGATGTCCCCCATGT
Run Code Online (Sandbox Code Playgroud)

使用以下代码:

import re

seq = 'ACCCTNGGATGTGGGGGGATGTCCCCCATGTGCTCG'

matches = re.findall("[ACGT]{4,}ATGT", seq)

if matches:
    for match in matches:
        print(match)
Run Code Online (Sandbox Code Playgroud)

我只得到了

GGATGTGGGGGGATGTCCCCCATGT
Run Code Online (Sandbox Code Playgroud)

较短的那一个不见了。然后我意识到re.findall不允许重叠。我从如何使用正则表达式查找所有重叠匹配中找到了这个解决方案,然后我将代码修改为:

matches = re.findall("(?=([ACGT]{4,}ATGT))", seq)
Run Code Online (Sandbox Code Playgroud)

然后我得到:

GGATGTGGGGGGATGTCCCCCATGT
GATGTGGGGGGATGTCCCCCATGT
ATGTGGGGGGATGTCCCCCATGT
TGTGGGGGGATGTCCCCCATGT
GTGGGGGGATGTCCCCCATGT
TGGGGGGATGTCCCCCATGT
GGGGGGATGTCCCCCATGT
GGGGGATGTCCCCCATGT
GGGGATGTCCCCCATGT
GGGATGTCCCCCATGT
GGATGTCCCCCATGT
GATGTCCCCCATGT
ATGTCCCCCATGT
TGTCCCCCATGT
GTCCCCCATGT
TCCCCCATGT
CCCCCATGT
CCCCATGT
Run Code Online (Sandbox Code Playgroud)

然后我意识到这个搜索是从右到左开始的。那么我怎样才能要求re.findall从左到右搜索并允许重叠呢?

python regex findall

3
推荐指数
1
解决办法
309
查看次数

高效生成一个字符串的所有可能子串的列表

我想编写一个函数,根据子字符串的最小和最大长度有效地返回字符串的所有可能子字符串的列表。(字符串仅包含大写字母。)

例如,对于 String 'THISISASTRING'、 formin_length=3max_length=4,它应该返回:

['THI', 'THIS', 'HIS', 'HISI', 'ISI', 'ISIS', 'SIS', 'SISA', 'ISA',
 'ISAS', 'SAS', 'SAST', 'AST', 'ASTR', 'STR', 'STRI', 'TRI', 'TRIN',
 'RIN', 'RING', 'ING']
Run Code Online (Sandbox Code Playgroud)

我正在寻找一种比我目前的解决方案快得多的解决方案:

import cProfile

random_english_text = \
    'AHOUSEISABUILDINGTHATISMADEFORPEOPLETOLIVEINITISAPERMANENTBUILDINGTHATISMEANTTOSTAYSTANDINGITISNOTEASILYPACKEDU' \
    'PANDCARRIEDAWAYLIKEATENTORMOVEDLIKEACARAVANIFPEOPLELIVEINTHESAMEHOUSEFORMORETHANASHORTSTAYTHENTHEYCALLITTHEIRHO' \
    'MEBEINGWITHOUTAHOMEISCALLEDHOMELESSNESSHOUSESCOMEINMANYDIFFERENTSHAPESANDSIZESTHEYMAYBEASSMALLASJUSTONEROOMORTH' \
    'EYMAYHAVEHUNDREDSOFROOMSTHEYALSOAREMADEMANYDIFFERENTSHAPESANDMAYHAVEJUSTONELEVELORSEVERALDIFFERENTLEVELSAHOUSEI' \
    'SSOMETIMESJOINEDTOOTHERHOUSESATTHESIDESTOMAKEATERRACEORROWHOUSEACONNECTEDROWOFHOUSES'

def assemble_substrings(textstring, length_min, length_max):
    str_len = len(textstring)
    subStringList = []
    idx = 0
    while idx <= str_len - length_min:
        max_depth = min(length_max, str_len - idx)
        for i in list(range(length_min, max_depth + 1)):
            subString = …
Run Code Online (Sandbox Code Playgroud)

c c++ python string list

2
推荐指数
1
解决办法
2723
查看次数

获取正则表达式的所有可能匹配(在python中)?

我有一个正则表达式,可以多种重叠的方式匹配字符串.但是,它似乎只捕获字符串中的一个可能的匹配,我如何获得所有可能的匹配?我试过finditer没有成功,但也许我错了.

我正在尝试解析的字符串是:

foo-foobar-foobaz
Run Code Online (Sandbox Code Playgroud)

我正在使用的正则表达式是:

(.*)-(.*)

>>> s = "foo-foobar-foobaz"
>>> matches = re.finditer(r'(.*)-(.*)', s)
>>> [match.group(1) for match in matches]
['foo-foobar']
Run Code Online (Sandbox Code Playgroud)

我想要比赛(foo和foobar-foobaz),但它似乎只得到(foo-foobar和foobaz).

python regex pattern-matching

1
推荐指数
1
解决办法
4150
查看次数

Python:如何在字符串中获取连续的n-size片段?

给定一个字符串"8584320342564023450211233923239923239110001012346596",如何获得所有连续的4位数子序列?

例如,上面的字符串会产生:8548,5843,8432, 0342,...

python

0
推荐指数
1
解决办法
184
查看次数

为什么python的re.findall不返回我的例子中所有找到的子串?

可能重复:
Python正则表达式找到所有重叠匹配?

我不明白为什么python的re.findall在下面的例子中没有返回所有找到的子串.有任何想法吗?

>>> import re
import re
>>> t='1 2 3'
t='1 2 3'
>>> m=re.findall('\d\s\d',t)
m=re.findall('\d\s\d',t)
>>> m
m
['1 2']
Run Code Online (Sandbox Code Playgroud)

但预期的结果是m = ['1 2','2 3'].

有关信息,我使用的是python 2.6.1.谢谢.

python findall

-1
推荐指数
1
解决办法
6672
查看次数

Python:重叠正则表达式搜索

因此,如果我在 python (3.7) 中创建一个如下所示的程序:

import re
regx = re.compile("test")
print(regx.findall("testest"))
Run Code Online (Sandbox Code Playgroud)

并运行它,然后我会得到:

["test"]
Run Code Online (Sandbox Code Playgroud)

即使有两个“测试”实例,它也只向我展示了一个,我认为这是因为第二个“测试”中使用了第一个“测试”中的字母。我怎样才能制作一个程序来["test", "test"]代替我?

python regex

-1
推荐指数
1
解决办法
99
查看次数

标签 统计

python ×9

regex ×6

findall ×2

c ×1

c++ ×1

list ×1

pattern-matching ×1

python-itertools ×1

string ×1