boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
Programming版 - 如何 replace这里的第二个x
相关主题
RegEx puzzle
python能检查出space是一个还是两个吗?
perl 匹配问题
Perl程序员工作机会多吗?
谈一谈计算机程序里那些边边角角的skills
新年快乐,15年全年水枪包
准备向wdong大牛学习单干了
re一问
请教一个变态的regular expression 替换
any way to use regex in Fortran?
相关话题的讨论汇总
话题: sed话题: replace话题: xb
进入Programming版参与讨论
1 (共1页)
t**********y
发帖数: 374
1
aaabbbxccdddx123
aaddxeeffxm234
有简单的linux command line可以做个吗?谢谢了!
e*******o
发帖数: 4654
2
用x split 3部分 然后 在合一块
这个慢 但最清晰
否则就折腾regex

【在 t**********y 的大作中提到】
: aaabbbxccdddx123
: aaddxeeffxm234
: 有简单的linux command line可以做个吗?谢谢了!

h**********c
发帖数: 4120
3
this not context free so a allittle annoying
W -> [^x]*x[^x]*xB.*
after replace
W' -> [^x]*x[^x]*B.*
So insert a special symbol B after the second x.
then replace xB with epsilon, which is empty string
Two steps:
- replace [^x]*x[^x]*x with [^x]*x[^x]*xB, B must be a special symbol
- replace xB with epsilon
Pipe two sed should do.

【在 t**********y 的大作中提到】
: aaabbbxccdddx123
: aaddxeeffxm234
: 有简单的linux command line可以做个吗?谢谢了!

n*w
发帖数: 3393
4
sed/awk
n******7
发帖数: 12463
5
echo 'aaabbbxccdddx123' | sed -r 's/(.+)x/\1/'
n******7
发帖数: 12463
6
我这个在楼主例子还ok,因为他的第二个总是最后一个
对你的例子需要lazy match,我发现GNU标准的regex不支持这个
用perl就好
$ echo 'aaabbbxccdddx12x3' | perl -pe 's|(.*?x.*?)x|\1|'

【在 h**********c 的大作中提到】
: this not context free so a allittle annoying
: W -> [^x]*x[^x]*xB.*
: after replace
: W' -> [^x]*x[^x]*B.*
: So insert a special symbol B after the second x.
: then replace xB with epsilon, which is empty string
: Two steps:
: - replace [^x]*x[^x]*x with [^x]*x[^x]*xB, B must be a special symbol
: - replace xB with epsilon
: Pipe two sed should do.

n******7
发帖数: 12463
7
靠,那就是echowuhao的方案了
用x split,再用x join,中间n-th x省略

【在 h**********c 的大作中提到】
: this not context free so a allittle annoying
: W -> [^x]*x[^x]*xB.*
: after replace
: W' -> [^x]*x[^x]*B.*
: So insert a special symbol B after the second x.
: then replace xB with epsilon, which is empty string
: Two steps:
: - replace [^x]*x[^x]*x with [^x]*x[^x]*xB, B must be a special symbol
: - replace xB with epsilon
: Pipe two sed should do.

e*******o
发帖数: 4654
8
如果 你search 以下 有现成答案
不过 没啥意思 可读性太差
真不如split join 直观
要想快 用两次index 就好了

【在 h**********c 的大作中提到】
: this not context free so a allittle annoying
: W -> [^x]*x[^x]*xB.*
: after replace
: W' -> [^x]*x[^x]*B.*
: So insert a special symbol B after the second x.
: then replace xB with epsilon, which is empty string
: Two steps:
: - replace [^x]*x[^x]*x with [^x]*x[^x]*xB, B must be a special symbol
: - replace xB with epsilon
: Pipe two sed should do.

e*******o
发帖数: 4654
9
split 可以带第三个参数 split的份数

【在 n******7 的大作中提到】
: 靠,那就是echowuhao的方案了
: 用x split,再用x join,中间n-th x省略

n******7
发帖数: 12463
10
忘记次数match了
不过我又看了一下sed,最直接的应该还是用sed -r ‘s/x//n'
比如
echo 'aaabbbxccdddx12x3x3' | sed -r 's/x//3'

【在 h**********c 的大作中提到】
: this not context free so a allittle annoying
: W -> [^x]*x[^x]*xB.*
: after replace
: W' -> [^x]*x[^x]*B.*
: So insert a special symbol B after the second x.
: then replace xB with epsilon, which is empty string
: Two steps:
: - replace [^x]*x[^x]*x with [^x]*x[^x]*xB, B must be a special symbol
: - replace xB with epsilon
: Pipe two sed should do.

t**********y
发帖数: 374
11
谢谢!
我这里x不一定是最后一个。所以我觉得这个sed -r 通用一些!

【在 n******7 的大作中提到】
: 忘记次数match了
: 不过我又看了一下sed,最直接的应该还是用sed -r ‘s/x//n'
: 比如
: echo 'aaabbbxccdddx12x3x3' | sed -r 's/x//3'

1 (共1页)
进入Programming版参与讨论
相关主题
any way to use regex in Fortran?
匹配问题 (转载)
装完boost之后还要再装REGEX吗?
[合集] regular expression for whitespace in path
Can someone help me a quick regex?
要不要学习 scripting languages such as Python?
from beautiful code
regex question
any perl html parser to recommend?
GCC TR1 实现regex 没?
相关话题的讨论汇总
话题: sed话题: replace话题: xb