用正则表达式搜索双打

时间:2016-01-15 21:56:14

标签: python regex

是否存在一个与浮点数相匹配的正则表达式,但如果这是15.01.2016之类的构造的一部分则没有?

如果1.0A 1.B .1

s应该会成功

1.0.0
1.0.1
20.20.20.30
12345.657.345

并且"[0-9]*\.[0-9]*"喜欢

并不成功
"[0-9]+\.[0-9]+(\.[0-9]+)+"

修改 关键部分是约束的组合:<div class='about'> <p> JavaScript (/ˈdʒɑːvəˌskrɪpt/[5]) is a high-level, dynamic, untyped, and interpreted programming language. </p> <br> <p> Despite some naming, syntactic, and standard library similarities, JavaScript and Java are otherwise unrelated and have very different semantics. </p> <br> <p> JavaScript is also used in environments that are not web-based, such as PDF documents, site-specific browsers, and desktop widgets. </p> <br> </div> 而不是.about { width: 500px; text-align: center; margin: auto; padding-top: 50px; border-right: 1px solid white; border-left: 1px solid white; padding-right: 15px; padding-left: 15px; height: 200px; }

的一部分

2 个答案:

答案 0 :(得分:4)

你可以在python中使用这个正则表达式:

(?<![\d.])(?:\d*\.\d+|\d+\.\d*)(?![\d.])

RegEx Demo

    如果下一个字符是DOT或数字,
  • (?![\d.])是先行断言以使匹配失败 如果之前的字符是DOT或数字,则
  • (?<![\d.])是后置断言以使匹配失败

答案 1 :(得分:2)

以下解决方案也使用前瞻和后视作为anubhava提到。此外,它负责处理负数,10的幂(也是负数)和整数(没有。):

(?<![\d.])-?(?:\d+\.?\d*|\d*\.\d+)([eE]-?\d+)?(?![.\d])

如果你在lookabehind (?<![\d.])中添加一些额外的字符,你可以避免在随机字符串或单词末尾的匹配(例如,如果你不希望"python3"匹配)。< / p>