正则表达式解疑

lilunlil 2020-01-03 04:08:26
有以下字符串

引用
190401(一)数据得分为75
190402(二)数据得分为75
190403(三)数据得分为50
190404(四)数据得分为75
190405(五)数据得分为60
190406(六)数据得分为55
190407(日)数据得分为65


现想将最后的数字全部提出来,用了以下表达式
引用
(?<=为).*?\n

但这样出来有两个问题:
①为什么每行的数字中间莫名其妙多了一行呢(真是百思不得其解,我是提取,又不是替换,为啥会增加东西呢)
②这个表达式无法获取4月7日的65,原因应该能理解,就是65后面是字符串结束标志,而不是换行符
但我为什么用这个表达式
引用
(?<=为).*?[\n$]
还是无法提取呢。

测试网站https://tool.oschina.net/regex


...全文
114 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
秋的红果实 2020-01-04
  • 打赏
  • 举报
回复
补充下,(?<=为).*可以匹配到你要的数,因你要的数据正好末尾是\n
6lilu9 2020-01-04
  • 打赏
  • 举报
回复
我来一个直观,好理解的 (?<=为).*?(?=\n|$)
秋的红果实 2020-01-03
  • 打赏
  • 举报
回复
(?<=为).*?\n 匹配到的内容里,最后一个字符是换行,输出后,你看上去是一个空行 最后一行数据,....65,最后没有\n,也就匹配不到,于是最终少了一个 (?<=为).*为什么可以达到目的? .可以匹配非\n的任何字符,你源数据里每行末的\n不会被匹配,输出就没有空行了 但,这么写,能匹配出每个数字吗? 似乎还包含非数字吧,这里的?表示懒惰匹配 其实没必要象上面的复杂,可以这样 (?m)(?<=为)\d+?
  • 打赏
  • 举报
回复

(?<=为)\d+
本人QQ-554433626 2020-01-03
  • 打赏
  • 举报
回复
因为你把回车也加入了匹配项啊
lilunlil 2020-01-03
  • 打赏
  • 举报
回复
引用 1 楼 本人QQ-554433626 的回复:
引用
(?<=为).*
.
可行,能否解释下原因呢? 真心不懂
本人QQ-554433626 2020-01-03
  • 打赏
  • 举报
回复
引用
(?<=为).*
.

110,534

社区成员

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

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

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