【问题标题】:Joining two strings so that their common suffix and prefix are merged加入两个字符串,使其常见的后缀和前缀合并
【发布时间】:2012-04-06 04:35:52
【问题描述】:

我有两个字:

AGCGCGATAGC
       ^^^^
TAGCTATATATA
^^^^

第二个词有TAGC与第一个词共通。所以我希望结果是:

AGCGCGATAGCTATATATA
       ^^^^

有没有结合这些词的 Perl 函数?使用连接可能会导致重复:

AGCGCGATAGCTAGCTATATATA
       ^^^^^^^^

【问题讨论】:

标签: regex string perl concatenation


【解决方案1】:

一种简单的方法是将字符串与不在字母表中的字符连接在一起:

my $s1 = 'AGCGCGATAGC';
my $s2 = 'TAGCTATATATA';
$_ = "${s1}_$s2"

然后在分隔符的每一侧匹配并替换可能最长的公共字符串:

s/([ACGT]*)_\1/$1/

【讨论】:

  • $_ = "$s1_$s2" 应该是 $_ = "${s1}_$s2" (以避免错误)并且 [ACGT]+ 应该是 [ACGT]* (为了处理没有公共子字符串的输入)。
  • @Ekkehard.Horner:谢谢。这就是我不测试的结果!
【解决方案2】:

你可以像这样使用构造:

my $txt = 'AGCGCGATAGCD';
my $txt2 = 'TAGCTATATATA';
print "$txt\0$txt2" =~ /(.*)(.+)\x{0}\2(.+)/ ? "$1$2$3" : "$txt$txt2";

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-12-02
    • 2018-07-12
    • 1970-01-01
    • 2021-06-25
    • 1970-01-01
    • 1970-01-01
    • 2017-03-22
    • 1970-01-01
    相关资源
    最近更新 更多