[变态正则]征集答案

兔子-顾问 2011-01-31 02:16:10
加精
已知字符串:
xxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxx

和一个位置,例如第二行第8个,就是已知一个数字:31
第一行21个,回车换行2个,然后第二行8个。

目标,把第二行正行替换为a

例如

xxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxx

已知 31

替换为
xxxxxxxxxxxxxxxxxxxxx
aaaaaaaaaaaaaaaaaaaaa
xxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxx


纯属正则爱好者练手用,原本也出自我自己一个小工具中实际需要。非正则方法很容易了,不用讨论。
...全文
3686 190 打赏 收藏 转发到动态 举报
写回复
用AI写文章
190 条回复
切换为时间正序
请发表友善的回复…
发表回复
andlife2008 2011-02-18
  • 打赏
  • 举报
回复
看过了,给点分急用
yixinweijing 2011-02-18
  • 打赏
  • 举报
回复
只看到问题中有好多X子
PainPain0 2011-02-16
  • 打赏
  • 举报
回复
不明白。。。。。。
wjywangjiay 2011-02-15
  • 打赏
  • 举报
回复
觉得不错啊
~~
心灵的轻 2011-02-15
  • 打赏
  • 举报
回复
hotkarriver 2011-02-15
  • 打赏
  • 举报
回复
linchb_ 2011-02-14
  • 打赏
  • 举报
回复
找个厉害点的做师傅。。教程序。。范围有点广。。不过我会很认真学的。。
hhhhh321das 2011-02-13
  • 打赏
  • 举报
回复
看完我只觉得眼前有好多星星,佩服
VCXIAOHEI 2011-02-12
  • 打赏
  • 举报
回复
没读懂问题……
dungeonsnd 2011-02-12
  • 打赏
  • 举报
回复
baitf0930 2011-02-12
  • 打赏
  • 举报
回复
我也是呀![Quote=引用 5 楼 lxcnn 的回复:]
还是需要明确给的位置,如果遇到\r或\n如何处理,比如位置45或46


C# code
string test = @"xxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxx";
//int index;
//Int32.TryParse(textBox1.T……
[/Quote]
vampirepig 2011-02-12
  • 打赏
  • 举报
回复
太专业了、我只是像来下软件、
cuixiping 2011-02-11
  • 打赏
  • 举报
回复
费了九牛二虎之力才理解了楼主要表达的意思,真够呛。

解答我就不言了,我重新描述一下楼主的题目:

给定字符串str,和整数i(i>=0 && i<str.length)
求一正则替换,使得字符串str中位于第i个字节处的字符所在的行的整行字符(不含换行回车)都被替换为指定字符"a" (行尾的换行符和回车符共2个字节)


已知字符串:
xxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxx
现给定一个参数31,求正则替换,将第31个字节所在行的字符全部替换为字符"a".
因第31字节在第2行,即要把第2行的"x"全部替换为"a",返回结果:
xxxxxxxxxxxxxxxxxxxxx
aaaaaaaaaaaaaaaaaaaaa
xxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxx
zkp890215 2011-02-10
  • 打赏
  • 举报
回复
表示题目没看懂。。。
准备再看几遍。。。
Mr-Jee 2011-02-10
  • 打赏
  • 举报
回复
[Quote=引用 146 楼 wuyazhe 的回复:]
<1>单行模式下.替换[\s\S],[\w\W],[\d\D]之类的,规则简化,速度就会更快。
<2>(?m:^)此类写法。
[/Quote]
这2点没什么特别的,特别的是过客写正则的思维和思路
很多特性我用起来显得很丑陋,而过客用起来是画龙点睛。
睡了。都6点了

话说早知道这样还不如在群里说,浪费了300分
谢继雷 2011-02-10
  • 打赏
  • 举报
回复
附注:如果 M(x) 是可约的,M 的阶数就有可能和 x 无关,就有可能简化为正则,但这个只要画出来看看就知道,|M| 约等于 x^2,即使约掉一个 x,还剩下一个 x,所以显而易见是不可约的。
谢继雷 2011-02-10
  • 打赏
  • 举报
回复
写错了:因为 x 落在不同行上的结果是不同的,所以 S(x, i)、S(y, j) 在 x!=y 的点上可区,可以验证 M 是不可约的,因为x是自变量,于是 f(s,x) 是不确定的,于是 f 不是正则的,故不能用正则表达式来求解。
谢继雷 2011-02-10
  • 打赏
  • 举报
回复
LZ 的意思是说,位置 x 按字节所在的行,把那一整行全部替换成 a 吧?

是这个意思吗?

那么,参数 x 怎么表示呢?

假设函数 f(s,x) -> t 用于执行所述的替换,根据定理,正则和自动机等价,那么第一步要根据参数 x 构建一个至少 x*L 阶的自动机 M,L = min(每行可能出现的最多字数,x),其中 S(x, i) 表示第 x 行上的读入第 i 个字符的状态,S(x, i) 处处可接受,S(x, i) 吃掉除了换行符以外的任意字符转入 S(x, i+1),S(x, L)吃掉除了换行符以外的任意字符转入 S(x, L),S(x, i) 吃掉换行符则转入 S(x+1, 0)。注意:M 用于识别语言,而不执行替换功能,为了替换,需要在 M 上扩展出一个重写缓存,(有点像语义解释那样,或者语义缓存)因为 x 落在不同行上的结果是不同的,所以 S(x, i)、S(y, j) 在 x!=y 的点上不可分,可以验证 M 是不可约的,于是 f(s,x) 是不确定的,于是 f 不是正则语言,故不能用正则表达式来求解。
lord_is_layuping 2011-02-09
  • 打赏
  • 举报
回复
有些看不懂,楼主再写个java版的吧
chen870201 2011-02-09
  • 打赏
  • 举报
回复
你们太厉害了!
加载更多回复(79)

110,532

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧