问题标签 [lookahead]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
642 浏览

java - 带有负前瞻的 Java 正则表达式

我在用 Java 编写正则表达式来解析日志文件中的信息时遇到了一些麻烦。

我有一个字符串,其中结构“timeinstant:一些带有任何字符的字符串”重复了 1 到 N 次。

timeinstant 的格式为“dd/mm/yyyy hh:MM:ss:MMMMMM”(M 为微秒)。

我正在尝试做的是找到传入字符串中包含的最后一个 timeinstant 的微秒。

例如,使用字符串

我想 m.find()指出"987: pump..."。为了得到这个,我使用带有前瞻的正则表达式:

"(\\d{3}:)(?!\\d{4}/\\d{2}/\\d{2}\\s\\d{2}:\\d{2}:\\d{2}:\\d{6})"

但是现在m.find()指向819(包含在2012/04/02 16:28:51:861819)。

0 投票
3 回答
393 浏览

python - 函数定义上的正则表达式 findall。想要匹配 args 但不是函数

我有一个看起来像的字符串列表

我想只提取参数。我尝试了以下方法:

但是这会返回

首先,我对为什么看到 有点困惑'20',因为我指定字符串应该以单词字符开头。其次,我想知道如何改进我的前瞻性以匹配我正在寻找的内容。

我应该注意,有些字符串没有功能,看起来像

所以我不能简单地在括号内搜索。

0 投票
3 回答
168 浏览

c# - 如何使用正则表达式不匹配在多行模式中间包含特定文本的文本?

我正在尝试创建一个 C# 正则表达式来检测我们的 .csproj 文件中的引用何时没有将 <SpecificVersion> 设置为 False(必须在所有 <'s 之后添加一个空格才能使其在 StackOverflow 中正确显示)。所以这些是我需要处理的情况:

所以基本上任何没有明确包含“<SpecificVersion>False</SpecificVersion>”的文件引用。

所以让我们忽略第一种情况,因为它没有像其他 3 一样的主体,可以区别对待。所以这是我到目前为止所拥有的:

所以我在 [What should go here?] 块中尝试了很多东西,但似乎无法让任何东西非常完美地工作。我最接近的是在这个块中使用以下内容:

这适用于所有情况,除了在我想要匹配的任何引用下方有有效引用的情况下,有效引用看起来像:

看来我正在使用的前瞻并没有停止在 </Reference> 标记处,而是继续向下查看整个文件以确保它下面的文本没有“<SpecificVersion>False</SpecificVersion>”。

我怎样才能让我的前瞻停在它遇到的第一个“< /Reference>”,或者如果你有另一种方法来解决我的问题,我也愿意接受。任何建议表示赞赏。谢谢。

0 投票
5 回答
4495 浏览

regex - Perl Regex:如何从 CSV 行中删除引号内的引号

我有一个 CSV 文件中的一行,其中包含字段分隔符",字段分隔符作为字符串。有时",数据中存在破坏字段封闭符的数据。我正在寻找一个正则表达式来删除这些".

我的字符串如下所示:

我看过这个,但我不明白如何告诉它只删除引号

  1. 不在字符串的开头
  2. 不在字符串的末尾
  3. 前面没有,
  4. 后面没有,

我设法用这行代码告诉它同时删除 3 和 4 :

但是,我无法将^and$放在那里,因为前瞻和后瞻都不喜欢写成(?<!(^|,)).

除了拆分字符串并从每个元素中删除引号之外,有没有办法仅使用正则表达式来实现这一点?

0 投票
2 回答
777 浏览

c# - C# 正则表达式 - 拆分和保留拆分器

相关: https ://stackoverflow.com/a/2910549/194031

我有一个像这样的字符串:

我想得到:

还有,我不想

分裂。

基于相关的问题和其他类似的答案,我需要使用前瞻,但我无法弄清楚如何在完成删除标签并且如果部分标签丢失时不拆分时使用它们。

0 投票
4 回答
1704 浏览

regex - 正则表达式负前瞻正好3个大写字母围绕一个字符

我试图写一个正则表达式找到 两边正好有 3 个大写字母的所有字符

以下正则表达式查找字符左侧正好有 3 个大写字母,右侧有 3 个(或更多)的所有字符:

当尝试使用正则表达式将右侧限制为不超过 3 个大写字母时:

我没有得到任何结果,将 (?![AZ]) 添加到第一个正则表达式时似乎失败了。

有人可以向我解释这个问题并提出解决方法吗?

谢谢。

0 投票
1 回答
303 浏览

python - python regex:匹配一个被正好2个字符包围的字符

我需要一个 python 中的正则表达式,它匹配被正好 2 个下划线包围的任何字符。意思,意思

将匹配“a”,但

不会匹配。它需要支持重叠匹配,这样

将返回“ac”,因为 a 被双下划线包围,但 d,e 旁边有一个三重下划线,b 两边都有一个三重下划线。我现在拥有的

它解决了重叠,但不是上面示例中的“恰好 2”,它返回“adbec”

0 投票
2 回答
3701 浏览

python - Python 正则表达式:反向引用

这是 Python 2.5 代码(fox用链接替换单词<a href="/fox">fox</a>,它避免了链接内的替换):

输出是:

  1. 我不确定为什么反向引用\3不起作用。

  2. (?!((<.*?)|(<a.*?)))(fox)(?!(([^<>]*?)>)|([^>]*?</a>))作品见http://regexr.com?3170 亿,令人惊讶。第一个负前瞻(?!((<.*?)|(<a.*?)))让我感到困惑。在我看来,它不应该工作。取它找到的第一个匹配项,fox在 中gave chase to the fox.</p>,有一个<a href='http://en.wikipedia.org/wiki/Dog'>dog</a>where 匹配项((<.*?)|(<a.*?)),作为否定的前瞻,它应该返回一个 FALSE。我不确定我是否清楚地表达了自己。

非常感谢!

(注:我讨厌使用 BeautifulSoup。我喜欢编写自己的正则表达式。我知道这里很多人会说正则表达式不适用于 HTML 处理等等。但这是一个小程序,所以我更喜欢正则表达式而不是 BeautifulSoup)

0 投票
3 回答
1171 浏览

c# - 匹配字符串与正则表达式,只要它没有被括号包围

我正在寻找匹配字符串“Order By XXX”,其中 XXX 可以是任何字母、数字、句点、逗号、空格或方括号。但是,如果它没有被括号包围,我只想匹配它(一侧的括号是可以的,只要它不在两侧)。所以它应该匹配“”中的斜体部分,因为它不应该匹配任何东西

应该匹配(斜体匹配部分):

  • 从 Y顺序按 z选择 X
  • Select y = (select top 1 Z from C Order by [ID] desc )

不应该匹配:

  • 从 Y 中选择 X(按 z 排序)
  • Select aa, NTILE(4) OVER (Order by ab) group by ac

我有用于按文本匹配订单的正则表达式字符串:[ ]*order by [\w,.\[\] ]+。但是,我在正确地进行前瞻/落后工作时遇到了一些麻烦。关于如何进行的任何建议?

0 投票
1 回答
223 浏览

php - 为什么 $ 在这个正则表达式中不匹配?

我有以下行,用于分隔 GIF 文件中的帧:

如果您熟悉 GIF 文件格式,您可能会注意到其中的一个主要缺陷 - 它不会检测最后一帧,因为前瞻仅针对帧头。

相反,如果我将正则表达式更改为:'/(?P<frame>\x00\x21\xF9\x04.(?P<delay>..).\x00\x2C.*?)(?=\x00\x21\xF9\x04|\x3B$)/s\x3B文件终止符在哪里(后面是文件/字符串的实际结尾),整个事情都会失败,它甚至不能匹配一次。

我已经在 Kodos中对此进行了测试,但由于这是二进制数据,我能做的最好的就是纯文本等价物,它完全符合预期。该函数preg_match('/\x00\x3B$/', $fileContents) 确实匹配,并且在十六进制编辑器中对文件的分析确认它的布局是应该的。

那么,为什么添加|\x3B$前瞻会使其完全失败?

注意:是的,有一些用于处理 gif 图像的库。这个问题纯粹是关于过程,而不是最终结果。

编辑:我注意到管道空间实际上可能不是问题;正则表达式很乐意匹配\x00\x21\xF9\x04 or \x3B(这没有用,因为\x3B在整个文件中多次单独出现)。管道空间之后的多个字符似乎出现了问题......有点。\x3B$并且\x00\x3B都会导致整个正则表达式失败。但是,无论如何,仅寻找 $ 都会失败。这似乎是 $ 锚的问题,而不是其他任何问题,尽管这显然不是这里唯一的问题。

导致0个匹配的排列: