正则表达式合集帖(希望本帖能存活十年以上)

41 天前
 oakland
  1. 欢迎大家在这篇文章下面评论留言,给出自己在日常 coding 的过程中写过的正则表达式,并给出说明和示例,注明对应的语言,如果能给出如何写出来的详细解释更好。
  2. 欢迎大家留言给出自己想要实现的正则表达式(注明语言),然后群友给 ta 解答。
  3. 欢迎大家“优化”已经留言的正则表达式。
  4. 我希望这篇文章成为所有 “讨厌” 和 “喜爱” 正则表达式的同学的聚集地,并最终能让所有人理解和熟悉正则表达式。
3956 次点击
所在节点    正则表达式
47 条回复
zapper
41 天前
关于 2 和 3 ,为什么我不去问神奇的 GPT 呢
Kaiv2
41 天前
lua 语言,jdtls 取 Class 名称

%[([%a%$_]?[%.%w%(%)*"+,\\_%[%]%s :%-@<>]*)%]%(jdt://[^%)]+%)

测试字符 [String](jdt://xxxxxxxx)
ShinichiYao
41 天前
自从有了 ChatGPT 再也不用烦心正则怎么写了
oakland
41 天前
/^(\+|-)?\d+(\.\d+)?(E(\+|-)?\d+)?$/i

我先来一个,这个表示所有 JavaScript 中的所有数字格式,可以带正负号,可以是整数,可以是浮点数,可以是带 E|e 的科学计数法格式。比如
“1”
“+1”
“-1”
“-2.4879983487”
“2.34E-2”(表示 2.34 * 10^-2 ,也就是 0.0234)
“2.34e3”(表示 2340)
oakland
41 天前
@zapper 支持直接粘贴 chatgpt 的回答,也希望大家能帮 chatgpt 找 bug ,但我希望是 4 ,这个对大家作为 programmer 有帮助。
oakland
41 天前
@Kaiv2 好酷,有空的时候欢迎给出详细的解释
DavidDee
41 天前
/^-?\d+(\.\d+)?(e-?\d+)?$/i
/^-?\d+(\.\d+)?(e[+-]?\d+)?$/i
@oakland #4 gpt3.5 的答案,不知道对不对
igeeky
41 天前
# 下面的正则是把用户输入的(无意义)大于 2 个字的重复的内容变成单个. 没想到有什么好的,简单的算法实现. 使用正则就比较简单.(python 代码)
userInputText = """
测试测试测试
哈哈哈哈哈哈哈哈哈哈哈哈
哈哈哈
你在干嘛呢?你在干嘛呢?你在干嘛呢?你在干嘛呢?你在干嘛呢?你在干嘛呢?你在干嘛呢?你在干嘛呢?你在干嘛呢?
"""
import re
regex = r"(?P<r>.{2,100}?)(?P=r){2,}"
subst = "\\1"
outputText = re.sub(regex, subst, userInputText, 0, re.MULTILINE)
print("## input")
print(userInputText)
print("## output:")
print(outputText)

# 输出:

## input

测试测试测试
哈哈哈哈哈哈哈哈哈哈哈哈
哈哈哈
你在干嘛呢?你在干嘛呢?你在干嘛呢?你在干嘛呢?你在干嘛呢?你在干嘛呢?你在干嘛呢?你在干嘛呢?你在干嘛呢?

## output:

测试
哈哈
哈哈哈
你在干嘛呢?
oakland
41 天前
@DavidDee 这个回答不支持开头为 “+” 的这种格式,比如 “+1”,覆盖范围不全
oakland
41 天前
@igeeky 哈哈哈哈哈哈,你在干嘛呢?你在干嘛呢?测试!测试!
nagisaushio
41 天前
@oakland .1 似乎表示不了
nagisaushio
41 天前
@oakland 还有三个特殊值 NaN +-Infinity
nagisaushio
41 天前
@oakland 1. 也表示不了,边界条件还是很多的
igeeky
41 天前
再推荐一个我一直在用的一个正则在线测试编写工具吧: https://regex101.com
测试效果图:
https://postimg.cc/XB0GyvM8
clue
41 天前
我觉得吧, 一定要把一个复杂的校验用一个正则写出来, 是有强迫症, 也不符合代码高可阅读性的准则

把各个规则拆开校验, 性能又不会有很大的差距, 看起来还简单易懂, 后面的人改起来也方便
Rab
41 天前
zapper
41 天前
@oakland #5
请不要把 AI 生成的内容发送到这里
https://v2ex.com/about
duckyrain
41 天前
unco020511
41 天前
这种活交给 GPT 就挺好
rainbowhu
41 天前
(?<!\w)(err(er)?|fail(ed)?)(?!\w)
一般会用来高亮日志里的错误

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

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

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

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

© 2021 V2EX