首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何用'X‘替换子字符串中的字符,包括转义字符?

如何用'X‘替换子字符串中的字符,包括转义字符?
EN

Stack Overflow用户
提问于 2015-06-26 00:00:24
回答 2查看 587关注 0票数 0

我想在perl脚本中的给定字符串(包括转义字符)中替换一个子字符串(包括转义字符)。如果可能的话用regexp。

输入:

代码语言:javascript
运行
AI代码解释
复制
abcdefg hijkl: (mnop-qrst) uvwx
aabbccd deeff: (gghh-iijj) kkll
aaabbbc ccddd: (eeef-ffgg) ghhh

替换字符串示例:

代码语言:javascript
运行
AI代码解释
复制
ijkl:
gghh-iijj
ccddd: (eeef-ffgg)

输出:

代码语言:javascript
运行
AI代码解释
复制
abcdefg hXXXX: (mnop-qrst) uvwx
aabbccd deeff: (XXXX-XXXX) kkll
aaabbbc XXXXX: (XXXX-XXXX) ghhh

除了一篇文章“有办法用长度相同的X字符替换子字符串吗?”,我什么也没找到,但是没有转义字符。

regexp $s =~ s/(\Q$pattern\E)/'X' x length $1/e;适用于任何字母数字替换字符串,但如果它包含像()=,.-:;*这样的特殊字符,则不适用。

在上面的例子中,输入和替换字符串都可以包含特殊字符。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-06-26 03:48:58

更新

这里有一个解决方案,允许模式中的任何空格与目标字符串中的任意数量的空格匹配。注意,要做到这一点,我必须手动转义非单词字符,因此不再需要\Q.\E

请注意,最后一个模式在ccddd:(eeef-ffgg)之间有许多空格,但它正确地匹配字符串中的单个空格。

代码语言:javascript
运行
AI代码解释
复制
use strict;
use warnings;

my @patterns = (
  'ijkl:',
  'gghh-iijj',
  'ccddd:            (eeef-ffgg)',
);

# Build and compile the regex
my $pattern = join '|', map {
  my $item = $_;
  $item =~ s/([^\w\s])/\\$1/g;
  $item =~ s/\s+/\\s+/g;
  $item;
} @patterns;
$pattern = qr/$pattern/;

while ( my $s = <DATA> ) {
  $s =~ s/($pattern)/$1 =~ tr{a-zA-Z0-9}{X}r/eg;
  print $s;
}

__DATA__
abcdefg hijkl: (mnop-qrst) uvwx
aabbccd deeff: (gghh-iijj) kkll
aaabbbc ccddd: (eeef-ffgg) ghhh

输出

代码语言:javascript
运行
AI代码解释
复制
abcdefg hXXXX: (mnop-qrst) uvwx
aabbccd deeff: (XXXX-XXXX) kkll
aaabbbc XXXXX: (XXXX-XXXX) ghhh

原始员额

所需要的就是替换

代码语言:javascript
运行
AI代码解释
复制
s/(\Q$pattern\E)/'X' x length $1/e

使用

代码语言:javascript
运行
AI代码解释
复制
s/(\Q$pattern\E)/$1 =~ tr{a-zA-Z0-9}{X}r/e

这里有个示范。请注意,/r修饰符需要perlv5.14或更高版本

代码语言:javascript
运行
AI代码解释
复制
use strict;
use warnings;
use 5.014;

my @matches = (
  'ijkl:',
  'gghh-iijj',
  'ccddd: (eeef-ffgg)',
);

while ( my $s = <DATA> ) {
  $s =~ s/(\Q$_\E)/$1 =~ tr{a-zA-Z0-9}{X}r/e for @matches;
  print $s;
}

__DATA__
abcdefg hijkl: (mnop-qrst) uvwx
aabbccd deeff: (gghh-iijj) kkll
aaabbbc ccddd: (eeef-ffgg) ghhh

输出

代码语言:javascript
运行
AI代码解释
复制
abcdefg hXXXX: (mnop-qrst) uvwx
aabbccd deeff: (XXXX-XXXX) kkll
aaabbbc XXXXX: (XXXX-XXXX) ghhh
票数 1
EN

Stack Overflow用户

发布于 2015-06-26 00:50:37

这里我建议的诀窍是,预先生成正则表达式。

代码语言:javascript
运行
AI代码解释
复制
use strict;
use warnings;


my @replace_strings = qw ( ijkl:
    mnop-qrst
    hijkl: );

my %replace = map { $_ => "X" x length($_) } @replace_strings;

my $replace_regex = join( "|", map {quotemeta} @replace_strings );
$replace_regex = qr/($replace_regex)/;

while (<DATA>) {
    s/$replace_regex/$replace{$1}/g;
    print;
}

 __DATA__
 abcdefg hijkl: (mnop-qrst) uvwx

我们:

  • 使用“替换字符串”列表。
  • 使用map生成替换(x长度)
  • 生成与“搜索”匹配的正则表达式
  • 然后使用它来应用“替换”

因此,这印出:

代码语言:javascript
运行
AI代码解释
复制
abcdefg XXXXXX (XXXXXXXXX) uvwx

你可以用类似的技术。

后面是注释--看起来您想要定义一些字符串,只需替换它们中的文本。

那么像这样的事情怎么样:

代码语言:javascript
运行
AI代码解释
复制
my %replace = map { $_ => ($_ =~ s/\w/X/gr) } @replace_strings;

它(根据您的源数据)提供:

代码语言:javascript
运行
AI代码解释
复制
abcdefg hXXXX: (mnop-qrst) uvwx
aabbccd deeff: (XXXX-XXXX) kkll
aaabbbc XXXXX: (XXXX-XXXX) ghhh

(如果您也想替换它,可以将-添加到模式中)。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31068009

复制
相关文章
python字符串转义字符_python 转义
上图中因为python不知到如何处理一对单引号之后的内容,不能识别第三个单引号。(默认都是以一对单引号或双引号来表示字符串从结束到开始。)
全栈程序员站长
2022/11/01
7.2K0
python字符串转义字符_python 转义
python替换第n个字符串_替换字符串中第n个出现的子字符串
我已经想出了下面的方法,它还考虑了替换所有出现在左边或右边的“旧”字符串的选项。当然,由于标准str.replace工作得很好,因此没有替换所有引用的选项。def nth_replace(string, old, new, n=1, option='only nth'):
用户7886150
2021/01/11
4.8K0
PHP经典:替换子字符串
substr_replace:整个字符串(从这里结束) 替换成这个变量 从什么开始(默认从下标0开始)
贵哥的编程之路
2021/10/09
2K0
Python字符串的转义字符
字符串的转义字符 什么是转义字符 字符要转成其他含义的功能,所以我们叫他转义字符 \ + 字符 Python中的转义字符 符号 说明 \n 换行,一般用于末尾,strip对其也有效 \t 横向制表符(可以认为是一个间隔符) \v 纵向制表符(会有一个男性符号) \a 响铃 \b 退格符,将光标前移,覆盖(删除前一个) \r 回车 \f 翻页(几乎用不到,会出现一个女性符号) \' 转义字符串中的单引号 \'' 转义字符中的双引号 \\ 转义斜杠 转义无效符 在python中 在字符串前加 r 来将当
Zkeq
2022/05/18
1.7K0
js替换html中的字符串,js怎么替换字符串?
在js中,可以使用str.replace()方法来替换字符串。replace()方法用于在字符串中用一些字符替换另一些字符,或替换一个与正则表达式匹配的子串;然后返回一个新的字符串。
全栈程序员站长
2022/08/30
23.6K0
js替换html中的字符串,js怎么替换字符串?
java中字符串如何去掉转义字符
忽略转义的工具类, org.apache.commons.lang.StringEscapeUtils,其中unescapeJava(String s)方法是来处理java转义字符的,可以将字符串中的 “\”转换为 “\”,“'”转换为“'”等。通过这个方法处理以上字符串 package day01; import org.apache.commons.lang.StringEscapeUtils; public class StringEscapeUtils_Test {     public stat
Java学习123
2018/05/16
14.8K0
python 字符串 转义_python转义字符怎么用
python的字符串控制,有时候自动转义会带来很多问题,比如文件路径因为转义变得有异常,json字符串塞进json串中之后,自动的对引号加转义斜杠等,整理一下踩的一些坑。
全栈程序员站长
2022/11/17
3.9K0
php替换字符串中,PHP 替换字符串中的一些字符方法介绍
在php中替换字符串我们都会使用到str_replace函数了,此函数还可以使用正则,下面小编来给大家介绍一下替换字符串中的一些字符或替换第一次出现的字符实例。
全栈程序员站长
2022/08/25
4.8K0
php替换字符串中,PHP 替换字符串中的一些字符方法介绍
php如何替换字符串中的指定字符
常用的函数有:str_replace() 和preg_replace()。 str_replace() 函数使用一个字符串替换字符串中的另一些字符。 str_replace(find,replace,string,count)参数 描述 find 必需。规定要查找的值。 replace 必需。规定替换 find 中的值的值。 string 必需。规定被搜索的字符串。 count 可选。一个变量,对替换数进行计数。 str_replace(“raykaeso”, “leixuesong”, “raykaeso love php”); preg_replace ( pattern , replacement , subject,limit = -1 ,$count ) 作用:执行一个正则表达式的搜索和替换 pattern 必需。需要搜索的模式。 replacement 必需。用于替换的字符串或数组。 subject 必需。需要替换的字符串或数组。 limit 替换的次数。-1为无限 count 完成替换的次数,变量
全栈程序员站长
2022/08/25
4.8K0
Makefile中的字符串替换
Makefile Tutotial最后给出了一段makefile,里面OBJS有字符串通配、替换的过程:
mingjie
2023/10/13
5410
python中替换字符串中字符_Python replace()函数:替换字符串中的某个字符「建议收藏」
下面我们将通过一组示例,详细给大家说明下关于用python的替换问题,相信大家结合实例一定非常容易理解,一起来看下吧~
全栈程序员站长
2022/09/06
4.5K0
python中替换字符串中字符_Python replace()函数:替换字符串中的某个字符「建议收藏」
Html字符串转义
compile 'org.apache.commons:commons-text:1.8'
JQ实验室
2022/02/10
2.7K0
如何将字符串中的子字符串替换为给定的字符串?php strtr()函数怎么用?
strtr()函数是PHP中的内置函数,用于将字符串中的子字符串替换为给定的字符串。
吃猫的鱼Code
2023/02/02
5.2K0
[C语言] 初始字符串 & 转义字符与注释
不知道大家发现没有当我们是arr1数组的时候在最后当中是有反斜杠(\0),但是当我们在arr2数组的时候它是没有反斜杠(\0)的。
謓泽
2022/12/12
1.3K0
[C语言] 初始字符串 & 转义字符与注释
python中字符串转义与拼接
转义符为 \ 后面跟上单引号或者双引号,可以使得结果直接输出单引号或者双引号,这是Python编译器特定的解释,也被广泛应用在其它各类语言中。
刘金玉编程
2019/08/26
3.3K0
字符串中查找子串_cstring查找子字符串
假设要从主串 s = “goodgoogle” 中找到 t = “google” 子串。根据我们的思考逻辑,则有:
全栈程序员站长
2022/09/24
3.1K0
字符串中查找子串_cstring查找子字符串
php将字符串内的指定字符全部替换,php中如何替换字符串中的某个字符[通俗易懂]
语法:string strtr( string str, string from, string
全栈程序员站长
2022/08/31
12.1K0
php将字符串内的指定字符全部替换,php中如何替换字符串中的某个字符[通俗易懂]
js 字符串转义 与取消转义
转义序列 字符 \b 退格(BS 或 ASCII 符号 0x08 (8)) \f 换页(FF 或 ASCII 符号 0x0C (12)) \n 换行(LF 或 ASCII 符号 0x0A (10)) \r 回车(CR 或 ASCII 符号 0x0D (13)) \t 水平制表符(HT 或 ASCII 符号 0x09 (9)) \' 单引号 \" 双引号 \& &(and)符号 \\ 反斜杠 es6中使用字符串模板  如何含有  \r  会被换行 这个时候如果不想换行可以使用 String.raw`a b
拿我格子衫来
2022/01/24
12.6K0
js 字符串转义 与取消转义
字符串替换
每行数据是一个字符串,长度不超过1000  数据以EOF结束输出对于输入的每一行,输出替换后的字符串样例输入
书童小二
2018/09/03
2.9K0
点击加载更多

相似问题

如何用值X替换子字符串[]

16

如何用字符串替换转义字符

21

如何用'X‘这样的常量字符替换字符串的子字符串

14

如何用转义字符替换字符串中的所有特殊字符?

11

如何用新的子字符串替换字符串中的子字符串

12
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文