问个正则匹配的低端问题

2022-07-22 23:43:56 +08:00
 MajestySolor

类似这样的字符串,格式固定是

任意数量的英文字母 + . + 任意数量的英文字母 + . + 任意数量的英文字母 + . + 任意数量的英文字母

比如这样 dkfj.wer.dkfjj.sldkf

我只想要最后 sldkf 这个字符串,如何用正则匹配过滤掉前面的 dkfj.wer.dkfjj.

1489 次点击
所在节点    程序员
10 条回复
czyt
2022-07-22 23:49:24 +08:00
试试 (?<=\w+\.)\w+$
wxf666
2022-07-22 23:53:57 +08:00
$ sed 's/^.*\.//' <<<'dkfj.wer.dkfjj.sldkf'

输出:
sldkf
Hardrain
2022-07-22 23:54:38 +08:00
`[a-zA-Z]+\.[a-zA-Z]+\.[a-zA-Z]+\.([a-zA-Z]+)`

取$1

如果仅小写, 替换`a-zA-Z`为`a-z`

```
$ cat /tmp/sample.txt
dkfj.wer.dkfjj.sldkf

$ sed -Ee 's/[a-zA-Z]+\.[a-zA-Z]+\.[a-zA-Z]+\.([a-zA-Z]+)/\1/' /tmp/sample.txt
sldkf
```
wxf666
2022-07-22 23:57:13 +08:00
仅捕获想要的字符串:

[^.]*$
haodingzan
2022-07-23 00:01:22 +08:00
看起来是要做数据清洗,提取需要的值。

找个支持正则的编辑器,比如 VS Code
查找:^.*\. --> 从整句开头开始查找所有内容,结尾为一个“.”
替换:空

剩下的就是你要的了
MajestySolor
2022-07-23 00:17:45 +08:00
@czyt #1
@wxf666 #2
@Hardrain #3
@wxf666 #4
@haodingzan #5
已解决,非常感谢各位 👍
masker
2022-07-23 00:19:02 +08:00
正向断言
hitaoguo
2022-07-23 08:32:44 +08:00
这个需求不一定非要正则啊,split 拿最后
512357301
2022-07-23 09:41:14 +08:00
https://regex101.com/
↑↑↑试试这个网站,我一般用它写正则,
原来用的是站长工具里面正则测试
https://tool.chinaz.com/regex/
zhuweiyou
2022-07-24 08:55:48 +08:00
这不需要正则, split('.').pop() 就完事了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/868124

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX