用于确定String是否包含4个以上数字的正则表达式

时间:2019-03-27 06:30:08

标签: java python regex security

我想从如下所示的日志中提取URL字符串:

  

<13> 3月27日11:22:38 144.0.116.31 AgentDevice = WindowsDNS AgentLogFile = DNS.log PluginVersion = XXXX Date = 3/27/2019 Time = 11:22:34 AM线程ID = 11BC Context = PACKET消息=内部数据包标识符= 0000007A4843E100 UDP / TCP指示器= UDP发送/接收指示器= Snd远程IP = XXXX Xid(十六进制)= 9b01查询/响应= R操作码= Q标志(十六进制)= 8081标志(字符代码)= DR响应代码= NOERROR问题类型= A问题名称= outlook.office365.com

我正在寻找提取包含超过5位数字的名称文本。

建议的一种可能方法是(\d.*?){5,},但似乎不起作用,请提出另一种获取该字段的方法。

字符串匹配示例:

outlook12.office345.com outlook.office12345.com

4 个答案:

答案 0 :(得分:0)

尝试以下模式:(?=\b.*(?:\d[^\d\s]*){5,})\S*

说明:

(?=...)-正向超前,确保其中的模式与前面的某处匹配:)

\b-单词边界

(?:...)-非捕获组

\d[^\d\s]*-匹配数字\d,然后匹配零个或多个除空格\s或数字\d以外的任何字符

{5,}-匹配前面的模式5次或更多次

\S*-如果断言为true,则匹配空格中的零个或多个字符以匹配字符串,但是我认为您只需要断言:)

Demo

如果只希望连续的数字,请使用简化模式(?=\b.*\d{5,})\S*

Another demo

当然,您必须在后面加上正号:(?<=Name=),以断言您Name=的字符串先于

答案 1 :(得分:0)

此正则表达式:

(?<=Name=).*\d{5,}.*?(?=\s|$)

将从示例输入中提取诸如outlook.office365666.com(具有5个或更多连续数字)的字符串。

演示:https://regex101.com/r/YQ5l2w/1

答案 2 :(得分:0)

您可以寻找以下表达式:

Name=([^ ]*\d{5,}[^ ]*)

说明: Name=查找以“ Name =“开头的任何内容,然后在以下情况下进行捕获: [^ ]*任意数量的字符,不能包含空格 \d{5,},然后连续5位数 [^ ]*,然后再一次,所有数字最多到空格

答案 3 :(得分:-1)

尝试此正则表达式

([a-z0-9]{5,}.[a-z0-9]{5,})+.com

https://regex101.com/r/OzsChv/3

它分组,

outlook.office365.com
outlook12.office345.com

还有所有网址字符串