问题标签 [lookbehind]

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 投票
4 回答
761 浏览

python - Python(Perl 类型)正则表达式前瞻/后瞻

考虑一个字符串s = "aa,bb11,22 , 33 , 44,cc , dd "

我想使用Python中的正则表达式模块s拆分为以下标记列表,这类似于 Perl 提供的功能:

  1. "aa,bb11"
  2. "22"
  3. "33"
  4. "44,cc , dd "

笔记:

  • 我想用逗号标记,但前提是这些逗号的两边都有数字。
  • 我要定位的这些“数字逗号”周围的任何(可选)空格都应该在结果中删除。可选的空格可能不止一个空格。
  • 任何其他空格都应保留在原始字符串中的显示位置。

到目前为止,我最好的尝试如下:

但这会打印:

这与我想要的很接近,因为我想要的 4 件事都包含在列表中。我可以通过并摆脱任何空字符串和任何仅包含空格/逗号的字符串,但我宁愿有一个单行正则表达式来为我完成所有这些。

有任何想法吗?

0 投票
2 回答
548 浏览

.net - 正则表达式负后视可变距离

我正在尝试使用正则表达式在后来出现的 groupB 中查找早期 groupA 中不存在的内容。如果它存在于 A 中,但不存在于 B 中,这很好。这似乎意味着如果我必须使用正则表达式,则必须进行否定的后视。

大量简化的示例:

文本:

我对环视很陌生。这是立即想到的(或十几种变体之一),但你们中的知情人士会发现它没有按预期工作。

我的理想目标是匹配 groupB 中不存在于 groupA 中的项目,并且我无法重新排序输入。正确的示例输出:(不是由提供的正则表达式完成)

.NET 支持可变回溯距离,但显然我遗漏了一些东西!

0 投票
1 回答
160 浏览

c# - 正则表达式后视断言问题

这是我目前的正则表达式:

我想匹配我的richtextBox 中的所有sampleString

我的richtextBox 中的一些示例字符串是这样的:

问题是我的正则表达式匹配这个:TsampleString,$sampleString,%sampleString。

如何修复此正则表达式后视断言?谢谢

0 投票
1 回答
508 浏览

c# - 正则表达式匹配左双引号前面有未闭合的左双引号

笔记 :

左双引号 (") = &ldquo

右双引号 (") = &rdquo

我目前的正则表达式是这个

它与这里的第二个 &ldquo 匹配(这是正确的):

它还与此处的第二个 &ldquo 匹配(我不想发生这种情况,因为第一个报价已经关闭):

我如何编写一个正则表达式来匹配前面的每个 &ldquo 与未封闭的 &ldquo

感谢你的帮助!

0 投票
3 回答
655 浏览

c# - 正则表达式匹配双引号外的左单引号

笔记 :

左双引号 (") = &ldquo

右双引号 (") = &rdquo

左单引号 (') = &lsquo

我目前的正则表达式是这个

它与这里的 &lsquo 匹配(这是正确的):

它还与此处的 &lsquo 匹配(我不想发生这种情况,因为单引号在左右双引号内):

如何编写一个正则表达式来匹配不在左右引号内的每个 &lsquo

感谢你的帮助!

0 投票
1 回答
2389 浏览

regex - Vim 语法区域 - 后向混淆

在 .vimrc 中定义以下内容或在 vim 命令行中执行:

在活动缓冲区中使用 C 风格的方法调用查看结果:

你会看到方法名的首字母不匹配。

其目的是让后向模式强制将行首、文字.或空格放在任何匹配方法的第一个字符之前。

奇怪的是,将其设为负前瞻 ( \@<!) 似乎可行!

有人会好心解释为什么这种向后看是不正确的吗?

0 投票
1 回答
888 浏览

c# - 使用 Negative lookbehind 和 Negative lookahead assertion 的正则表达式

可能重复:
正则表达式匹配双引号外的左单引号

第一个注意事项:

我需要匹配不在左右双引号内的所有“左单引号”。

澄清:

  1. This is a &ldquo;sample &lsquo string &rsquo &rdquo -> this 不应该匹配,因为&lsquo(单引号)在双引号内

  2. 这是&lsquo sample &rsquo -> &lsquo 应该匹配,因为它不在双引号内

这是我当前的正则表达式:

问题在于,它同时查看&ldquoand &rdquo,如果出现 ldquo 和 rdquo 中的任何一个,它将不匹配

例如:

  1. 这是一个&lsquo sample &rdquo -> 我需要在这里匹配 &lsquo 但由于 &rdquo 的出现,正则表达式不匹配

  2. 这是&ldquo a string &lsquo sample->与第一个示例相同的问题

希望有人能帮助我!谢谢!

0 投票
1 回答
600 浏览

.net - .NET Regex Lookbehind Not Greedy

如何让后向变得贪婪?
在这种情况下,我希望后向使用 : if is present。

我找到了解决方法

只要你在后面加上一些肯定的?然后它消除了可选的贪婪。出于同样的原因,我不得不将 $ 放在前瞻中。
但是,如果您需要以可选的贪婪结束,那么必须使用下面接受的答案。

0 投票
2 回答
1163 浏览

regex - 如何匹配用单个空格分隔的单词与用多个空格分隔的单词

我需要将键和值与如下所示的文本分开

学生 ID:0
部门 ID = 18432
姓名 XYZ

在上面的示例中,Student ID、Department ID 和 Name 是键,0,18432、XYZ 是值。键与值通过 :,= 或多个空格分隔。我尝试了reg ex,例如

我面临的问题是确定一个单词何时用单个空格分隔以及何时被多个空格分隔。

我得到的输出是 line is Student ID: 0 key is Student , value is ID: 0 而我想要 key is Student ID 并且 value 是 0. 对于像 Subjects: 和 Computer Architecture 这样的行,键应该有 Subjects 和 Computer Architecture。稍后当没有值或冒号时我有逻辑,我将字符串附加到前一个键,所以它看起来像 Subjects=Computer Architecture;Advanced Network Security 2

更新:感谢 Ikegami 指出我使用后视运算符。但我似乎仍然无法解决它。

所以当我说(?<!\s\s)\s* [:=]\s*|\s*我的意思是当有两个以上的空间时,消耗所有的空间,当没有两个连续的空间时,寻找 : 或 = 并消耗空间。因此,如果您将下面的行传递给表达式,我不应该得到 $1=Name 和 $2=ABC XYZ 吗?

我似乎得到的是键是空的,值是名称 ABC XYZ。

0 投票
1 回答
162 浏览

java - java regex lookbehind 如何剪切部分预搜索结果?

我想知道如何匹配指定区域中的字符串:例如,我有一个 C++ 代码片段:

然后我想找出评论之外的关键字intfloat如何?我在想是否可以使用预搜索。但是一个简单的示例,\b\w+(?<=er)\b匹配'worker','super'之类的单词,如果我只想要这些结果的子字符串之前怎么办er。另一个例子,如果我只需要匹配c ++代码中的行注释,如果我使用//.*?\n,the\n也在结果中,但我不需要它... 更新: 我不知道我是否已经清楚地解释了我的问题,我不知道如何给我的问题起个标题.. . :(