Perl split 函数 - 使用重复字符作为分隔符

2024-03-28

我想使用重复字母作为分隔符来分割字符串,例如,"123aaaa23a3"应该拆分为('123', '23a3') while "123abc4"应保持不变。
所以我尝试了这个:

@s = split /([[:alpha:]])\1+/, '123aaaa23a3';

但这返回'123', 'a', '23a3',这不是我想要的。现在我知道这是因为最后'a' in 'aaaa'被括号捕获并因此被保留split()。但无论如何,我不能添加类似的东西?: since [[:alpha:]]必须捕获以供向后参考。 我该如何解决这种情况?


嗯,这是一个有趣的。我的第一个想法是 - 你的分隔符将始终是奇数,因此你可以丢弃任何奇数数组元素。

也许是这样的?:

my %s = (split (/([[:alpha:]])\1+/, '123aaaa23a3'), '' );
print Dumper \%s;

这会给你:

$VAR1 = {
          '23a3' => '',
          '123' => 'a'
        };

所以你可以通过提取你的模式keys.

不幸的是,我“选择”模式的第二种方法通过%+没有特别帮助( split 不会填充正则表达式的内容)。

但像这样的事情:

my @delims ='123aaaa23a3' =~ m/(?<delim>[[:alpha:]])\g{delim}+/g; 
print Dumper \%+;

通过使用命名捕获,我们确定a来自捕获组。不幸的是,当您通过以下方式执行此操作时,这似乎并未填充split- 这可能会导致两次通过的方法。

这是我得到的最接近的:

#!/usr/bin/env perl
use strict;
use warnings;
use Data::Dumper;

my $str = '123aaaa23a3';

#build a regex out of '2-or-more' characters. 
my $regex = join ( "|", map { $_."{2,}"} $str =~ m/([[:alpha:]])\1+/g);
#make the regex non-capturing
$regex = qr/(?:$regex)/;
print "Using: $regex\n";

#split on the regex
my @s  = split m/$regex/, $str;

print Dumper \@s;

我们首先处理字符串以提取“2 个或更多”字符模式,以设置为我们的分隔符。然后我们使用非捕获方式将它们组装成一个正则表达式,这样我们就可以进行拆分。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Perl split 函数 - 使用重复字符作为分隔符 的相关文章

  • .NET 查询字符串值的正则表达式

    我需要从 Url PathAndQuery 中删除任何 id SomeValue 其中 SomeValue 可以是整数或字符串 它后面可能有也可能没有另一个 符号 所以它可能是 somepage aspx cat 22 id SomeId
  • 第二次匹配某个字符串后提取数字

    我想提取第二次出现下划线后的数字 从一个模式 通过关注这里的类似帖子 前瞻后匹配不同的数字 https stackoverflow com questions 25099231 matching different digits after
  • 从字符串中提取所有链接

    我有一个 javascript 变量 其中包含页面的 HTML 源代码 不是当前页面的源代码 我需要从该变量中提取所有链接 关于什么是最好的方法的任何线索 是否可以为变量中的 HTML 创建一个 DOM 然后遍历它 我不知道这是否是推荐的方
  • Perl OO 方法调用第一个参数值 (->)

    就 Perl OO 而言 到底做了什么 gt do 例如我拨打 main 电话 result a b gt mymethod 在我定义的包中mymethod 我使用以下内容 my class 总的来说 我显然没有向mymethod 那么哪里
  • 判断正则表达式是否只匹配固定长度的字符串

    有没有办法确定正则表达式是否只匹配固定长度的字符串 我的想法是扫描 和 然后 需要一些智能逻辑来查找 m n 其中 m n 没有必要采取 考虑到运营商 小例子 d 4 是固定长度 d 4 5 或 d 是可变长度 我正在使用PCRE Than
  • 如何在 Perl 中使用数组引用中的索引作为方法引用?

    如同这个关于迭代子例程引用的问题 https stackoverflow com questions 452529 how do i iterate over dereference an array of subroutine refs
  • PostgreSQL 对 string\varchar 的各种清理

    我必须通过以下方式清理一些 varchar 删除特殊字符 例如 来自封闭列表 我已经成功地通过大量使用replace regexp replace来做到这一点 但我正在寻找类似于SQL Server中的东西 删除以下数字但不删除相邻的数字含
  • 如何从 Perl 调用 gnuplot 脚本

    我有一个 gnu gp 文件 grphist conf set terminal canvas Terminal type set to canvas Options are solid butt size 600 400 fsize 10
  • 当一个模块安装了两个版本时 Perl 会做什么?

    我在正在使用的远程机器上没有 root 访问权限 因此我使用 cpanm 和 local lib 的组合 如下所述here https stackoverflow com a 2980715 1156644将 CPAN 模块安装到我的本地目
  • 正则表达式查找 Java 字符串中前 8 位数字的第一次出现

    这是我的字符串20161011 我想得到第一个字符串20161011 我正在使用 s 0 9 s 但是它不起作用 有人可以建议正确的用法吗 顺便说一句 我想检索的第一个字符串是格式的日期yyyymmdd 我不需要验证日期格式 因为它已经过预
  • htaccess 正则表达式目录到变量

    我需要对某些 URL 从目录到变量进行 301 重定向 EXAMPLE http domain com es stackoverflow gt http domain com stackoverflow lang es http domai
  • Javascript RegEx 替换所有不在 HTML 标签内的字符

    寻求一些帮助 我的正则表达式有点生锈 我试图用一个字符替换 javascript 中 HTML 标签之外的所有字符 例如 用破折号 替换这些字符 div class test Lorem Ipsum br Dolor Sit Amet di
  • regex php - 查找 div 中具有特定 ID 的内容

    我确信这是一个简单的问题 尽管我在谷歌上进行了如此多的搜索和搜索 但我似乎无法弄清楚这有什么问题 我在此页面上的其他区域使用类似的表达式来准确返回我想要的内容 但是 我无法让这个特定的位返回我想要的东西 所以也许有人可以帮助我 我有一个带有
  • Python正则表达式:如何用不同的值替换出现的每个实例?

    假设我有这个字符串 s blah blah blah 使用Python正则表达式 如何用不同的值替换 blah 的每个实例 例如 我有一个值列表v 1 2 3 你可以使用re sub打回来 http docs python org libr
  • python 2.7+ 中的组引用无效

    我正在尝试将我的网页 在 django 中创建 中的所有 WikiLink 类型的字符串转换为 html 链接 我正在使用以下表达式 import re expr r s A Z a z A Z a z s repl r a href 1
  • 有条件地将可选组替换为 gsub

    一位用户问我如何做到这一点如何使 ggplot 图例中的选定单词变为斜体 https stackoverflow com questions 76054997 how to italicize select words in a ggplo
  • 除括号中的空格外,将字符串拆分为所有空格

    我正在尝试将文本拆分为以下内容 例如在空格上 var line Text what is what s a story fable called named about Search Title 但我希望它忽略括号内的空格 这应该产生一个数
  • 如何从 Perl 中的字符串中去除无效的 XML 字符?

    我正在寻找一种标准的 经过批准的 可靠的方法 可以在将字符串写入 XML 文件之前从字符串中删除无效字符 我在这里讨论的是包含退格键 H 和换页符等的文本块 There has成为执行此操作的标准库 模块函数 但我找不到它 我在用着XML
  • 密码验证 PHP 正则表达式

    我是正则表达式的新手 我需要使用 php 验证密码 并使用正则表达式执行以下密码策略 密码 必须至少有 8 个字符 必须有2个号码 允许的符号有 我已经尝试过以下方法 d A Za z 0 9A Za z 以下完全符合您的要求 d d 0
  • 如何使用 Perl 从 NCBI 获取 FASTA 核苷酸格式的基因特征?

    我可以手动下载 FASTA 文件 如下所示 gt lcl CR543861 1 gene 1 ATGCTTTGGACA gt lcl CR543861 1 gene 2 GTGCGACTAAAA 通过单击 发送到 并选择 基因特征 FAST

随机推荐

  • SELECT FOR UPDATE 中的数据库死锁

    我的应用程序间歇性陷入僵局 我的应用程序有 1 个表 例如 EMPLOYEE ID PK NAME SAL 并且有 2 个会话 第一节 SELECT ID NAME SAL FROM EMPLOYEE WHERE SAL SELECT MI
  • spring mvc 对 URL 参数进行加密和编码

    我正在编写一个 Spring mvc 应用程序 它需要发送一封包含链接和加密参数的电子邮件 用户将单击该链接 我需要解密新页面中的参数 因此 我正在编写一个 util 类来加密和解密以及对参数进行编码和解码 当我运行我的独立java类 用于
  • 你能告诉 PHP 在发生错误时发送标头(如 500)吗?

    在我当前的项目中 我使用普通 HTTP 请求查询 PHP 但也通过 AJAX 查询 有时返回 JSON 格式的数据 有时返回普通文本 当发生错误时 在正常请求中 您会看到错误消息并可以采取一些措施 另一方面 对于 AJAX 请求 您无法确定
  • getchar() 返回错误的特殊情况是什么?

    所以我知道getchar 当输入结束或发生错误时返回 EOF 我也知道我可以通过以下方式检查发生了哪些情况ferror stdin and feof stdin 我想知道什么情况下会特别发生错误 我检查了这两个函数的手册页 但那里没有任何内
  • 就性能而言,使用 std::memcpy() 还是 std::copy() 更好?

    是不是比较好用memcpy如下所示还是使用更好std copy 就性能而言 为什么 char bits NULL bits new std nothrow char int copyMe gt bits 0 if bits NULL cou
  • 使用 Foreman 重新启动单个进程

    我已经使用 foreman 一段时间来以集中方式扩展我的各种 ruby 流程 并且它对我来说工作得很好 无论如何 我希望有一些功能来重新启动进程 甚至给它更多的控制权 例如终止进程并再次启动它 在当前的实现中 当我终止一个进程时 主工头中的
  • Chrome 无法播放 MP4

    我每天都会从我的安全摄像头系统中收到几封发送到我的 Gmail 帐户的电子邮件 此类邮件包含来自摄像机的 MP4 格式的视频剪辑 每个大约 20 秒 的链接 奇怪的是 在基于 Mageia 的 PC 上单击此类链接后 剪辑将打开并在新的单独
  • 在matlab中将绘图保存到图像文件中:saveas和print之间的区别

    我想知道在matlab中将绘图保存到图像文件时 saveas和print有什么区别 什么情况下两者可以同时使用 什么情况下只能使用其中一种 感谢致敬 我相信 SAVEAS 只是 PRINT 的包装 查看 SAVEAS 的源代码 编辑 sav
  • 对于缺少模板,给出 404 而不是 500 错误

    我有一个 Rails 3 0 应用程序 正在进行 3 2 升级 每当有人请求不存在的模板时 它都会在生产中给出 500 错误 例如 mysite com blog posts 532 将 ID 为 532 的帖子以 HTML 形式发送回来
  • 如何访问页面框架以通过 UWP 中的 UserControl 对象导航页面?

    我正在开发一个 UWP 应用程序 涉及多个用户控制 https learn microsoft com en us dotnet api system windows controls usercontrolMap 中的对象使用Window
  • 月份 R 没有前导零 [重复]

    这个问题在这里已经有答案了 format 在 R 中没有明显的选项来显示不带前导 0 的月份 与年份相同 还有其他方法可以得到这个结果吗 该解决方案应允许用户灵活选择是否仅在日 月 年或任意组合中省略 0 in as Date 2005 0
  • 在特定窗口中打开 Org Capture 缓冲区?

    我成为 Emacs 用户大约一年左右了 我通常为每个会话设置相同的窗口 四个窗口 我已经设置了捕获模板并且可以捕获我想要的内容 但是 我希望所选的捕获模板在新的 第五个 窗口中打开 保留我现有的窗口 而不是捕获模式暂时将我从窗口设置中拉出来
  • 注入相同类型的多个实例 - Autofac

    我试图在构造函数中注入同一类的多个实例 然而 当它们被解析时 它们总是解析为同一个实例 这是我的注册码 public Repository Class1 class1 Class1 class2 class1 class1 class2 c
  • SQLite 中的 SELECT INTO 语句

    sqlite是否支持SELECT INTO陈述 实际上我正在尝试将数据保存在table1 into table2作为修改数据之前数据库的备份 当我尝试使用SELECT INTO陈述 SELECT INTO equipments backup
  • 如何缩放具有背景大小的 div 上的背景图像

    我想要一个 div 元素拉伸 33 宽度 背景图像用 css 完成 background image url background size cover 如何在鼠标悬停或 mouseneter 上对 div 中的背景图像进行放大动画 是否有
  • 我的 Objective-C 单例应该是什么样子? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • Rails 找不到临时目录(ArgumentError)

    我正在将我的 Rails 项目上传到运行 12 04LTS 的 Ubuntu 服务器 但我似乎无法解决此问题 无论我是进行捆绑安装还是尝试使用 gem 我都会收到该错误 我读了很多 但仍然无法修复它 lib ruby 2 0 0 tmpdi
  • 我可以在 Vuex 中从 getter 进行调度吗

    小提琴 here https jsfiddle net 9a6Lg2vd 6 我正在使用 Vue 2 和 Vuex 创建一个 web 应用程序 我有一个商店 我想从 getter 获取状态数据 我想要的是如果 getter 发现数据尚未填充
  • 无法加载 spacy en_core_web_trf

    正如自我指南所说 我已经安装了它 conda 环境 conda install c conda forge spacy python m spacy download en core web trf I have spacy transfo
  • Perl split 函数 - 使用重复字符作为分隔符

    我想使用重复字母作为分隔符来分割字符串 例如 123aaaa23a3 应该拆分为 123 23a3 while 123abc4 应保持不变 所以我尝试了这个 s split alpha 1 123aaaa23a3 但这返回 123 a 23