Example string: 80 http, 135 epmap, 139 netbios-ssn, 443 https, 445 microsoft-ds, 1433 ms-sql-server, 3389, 5985, 8530, 10123, 49000-49999, 50000-59999, 60000-65535, 61003, 62959
如果连字符被文本包围,我想删除所有文本和连字符,如果连字符在数字范围内,请保留连字符。如果我使用^ 0-9 ^ - 它将保留所有连字符,即使它在一个范围内。我无法弄清楚正确的语法。
Outcome string example : 80, 135, 139, 443, 445, 1433, 3389, 5985, 8530, 10123, 49000-49999, 50000-59999, 60000-65535, 61003, 62959,
答案 0 :(得分:1)
答案 1 :(得分:0)
正则表达式将帮助您解决问题。
\d+-?\d*
爆炸说明:
\ d +匹配一个数字(等于[0-9])
+ Quantifier - 在一次和无限次之间匹配,尽可能多次,根据需要回馈(贪婪) - ?匹配字符 - 字面意思(区分大小写)
<强>?量词 - 尽可能多次匹配0到1次,根据需要回馈(贪婪) \ d *匹配一个数字(等于[0-9])
*量词 - 在零和无限次之间匹配,尽可能多次,根据需要回馈(贪婪) 全局模式标志 g修饰符:全局。所有比赛(首场比赛后不返回) m修饰符:多行。导致^和$匹配每行的开头/结尾(不仅是字符串的开头/结尾)
答案 2 :(得分:0)
这有效:
查找[\S\s]*?(\d+(?:-\d+)*)[^\d]*
替换$1,
https://regex101.com/r/ar2HoB/1
可读版本
[\S\s]*?
( # (1 start)
\d+
(?: - \d+ )*
) # (1 end)
[^\d]*
答案 3 :(得分:0)
在结果字符串中,您还希望删除没有连字符的单词。
要获得结果字符串,这种模式对你有帮助。
?[a-z-]+(?!\d)