问题标签 [lookaround]

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 投票
2 回答
498 浏览

regex - 正则表达式捕获捕获组内的第二个单词

我正在尝试使用正面的前瞻性来捕获捕获字符串中的第二个单词。我希望字符串中的第二个单词出现在空格后跟引号、空格后跟左括号或空格后跟字符串“Jr”。

这是一个示例行:

Anne R. Lomica "Lommy" (Datore)

到目前为止,这是我的正则表达式:

其中捕获:

安妮·R·洛米卡

但在其中我想捕捉:

R。

在示例行中:

小约翰·肖恩·富勒

我想捕捉:

肖恩

如何修改现有的正则表达式以在它已经捕获的内容中捕获第二个单词?

非常感谢你的帮助!

0 投票
1 回答
645 浏览

java - 如何反转正则表达式以在 java replaceAll 方法中使用它?

我需要字符串示例的最后一个字母字符:ABRACADABRA123456. 正则表达式[a-zA-Z](?=\d+)在我所有的情况下都给了我匹配。如何更改(反转)表达式以在 java 方法中使用它,例如:"ABRACADABRA123456".replaceAll(<inverse-regex>,"")

输入:ABRACADABRA123456
使用:"ABRACADABRA123456".replaceAll(...)
输出:(A字符串的最后一个字母字符)

解决:System.out.println("ABRACADABRA123456".replaceAll("([\\D]+)([a-zA-Z](?=\\d+))([\\d]+)","$2")));

0 投票
1 回答
221 浏览

python - 环顾四周并 re.sub()

我想知道 re.sub() 是如何工作的。以下示例在我正在阅读的一本书中。

我希望“1234567890”为“1,234,567,890”。

然后,我将“\g<0>”更改为“\g<1>”,但它不起作用。结果是“890,890,890,890”。为什么?我想确切地知道 re.sub() 和前瞻机制的捕获和替换是如何工作的。

0 投票
3 回答
641 浏览

python - Python 正则表达式中可变宽度lookbehind的替代方案

我最近决定跳入 Python 池的最深处,开始将我的一些 R 代码转换为 Python,但我被困在对我来说非常重要的事情上。在我的工作中,我花费大量时间解析文本数据,众所周知,文本数据非常非结构化。结果,我开始依赖正则表达式的环视功能,而 R 的环视功能非常强大。例如,如果我正在解析一个 PDF,当我对文件进行 OCR 时,它可能会在字母之间引入一些空格,我会得到我想要的值,如下所示:

在 Python 中,这是不可能的,因为使用?使lookbehind 成为可变宽度的表达式,而不是固定宽度的表达式。这个功能对我来说非常重要,它阻止了我想要使用 Python,但我不想放弃这种语言,我想知道 Pythonista 解决这个问题的方法。在提取文本之前我是否必须预处理字符串?像这样的东西:

有没有更有效的方法来做到这一点?因为虽然这个例子很简单,但这个问题在我处理的数据中以非常复杂的方式出现,我不想对我分析的每一行文本进行这种预处理。

最后,如果这不是问这个问题的正确地方,我深表歉意;我不确定在哪里发布它。提前致谢。

0 投票
0 回答
29 浏览

regex - 是否总是在正则表达式中的字符扩展后执行环视?

我试过这个

正则表达式

文本:

abcc..abc

abcdefgh_

abcd_abcd

abc_a_abc

abc__abcd

a__abcde_

abc++abcd

突出显示文本意味着匹配。

上面的正则表达式的字面意思是“匹配由除“以外的任何字符构成的任何行__”,我只是想知道这个正则表达式的评估过程,据我了解,这个过程假设是这样工作的

考虑文本:abc__abcd

评估过程:

  1. 检查条件^(匹配)。
  2. 检查条件.+(匹配)。
  3. 检查条件$(匹配)。

到目前为止,所有正则表达式仍然可以匹配我们考虑的文本。

  1. 检查负前瞻的条件。

(?![_]{2})a(?![_]{2})b(?![_]{2})c(?![_]{2})_(?![_]{2})_(?![_]{2})a(?![_]{2})b(?![_]{2})c(?![_]{2})d

负前瞻执行:

我的理解正确吗?

0 投票
3 回答
292 浏览

java - 正则表达式:不以“hede”结尾

[更新了答案]

  1. 不以“hede”开头:^(?!hede).*$
  2. 包含“hede”:^((?!hede).)*$
  3. 不以“hede”结尾:(?s)^.*+(?<!hede)$

所有 3 个表达式都有效。

检查:

0 投票
1 回答
99 浏览

regex - Optional Characters in a Lookaround

Say I wish to find every iteration of orange that is not preceded by apple and using RegEx. I also want this to work for the respective plurals.

Here's a list of what should and shouldn't be valid.

The code I've written to make this possible so far is the following.

When I test it, I receive an error, tracing back to the optional s character, after apple. Regex101 describes the error as the following.

Lookbehinds need to be zero-width, thus quantifiers are not allowed.

Why is this? How can I solve this problem?

0 投票
1 回答
707 浏览

regex - 正则表达式在环视表达式中查找所有出现的单词

我需要在任何 html 页面上的任何类声明中找到所有出现的“st”,例如:

我在类声明中说是因为整个文档中可能还会出现其他“st”,我不想更改每一个出现的地方。

我的最终目标是查找和替换。我为此编写了逻辑,但我只需要弄清楚如何将“st”与字符串隔离开来。

我已经尝试了一些不同的环视表达式,但我似乎无法匹配每一次出现。以下是我一直在尝试的一些示例。

此表达式获取 'class="' 和 '"' 之间的所有内容:

正则表达式:

测试刺:

匹配结果:

这是我尝试的另一个:

正则表达式:

测试刺:

匹配结果:

匹配组:

  1. st11
  2. 英石

我一直在Rubular.com测试我的正则表达式

从评论中添加
我将在终端 shell 命令中使用正则表达式,我将在特定文件夹上运行该命令。shell 命令将对文件夹中的每个文件进行查找和替换,如下所示...

任何帮助将非常感激。

0 投票
1 回答
127 浏览

regex - 正则表达式,匹配字符串,其中包含 R 中带有lookaroud str_replace 的换行符

我在 R 的 stringr 包中使用 str_replace 函数。我想替换 PARTITIONED BY 和 STORED AS 之间的子字符串

这些命令有效

那些 cammands 没有(我添加了一个 \n)

如果“between”字符串包含换行符 \n,如何使 str_replace 工作?

0 投票
0 回答
16 浏览

regex - 前瞻贪婪不起作用

我刚刚在正则表达式中学习了前瞻,但是有一个细节困扰着我:

为什么([^ ])*是贪婪而((?=dehe).)*不是,我希望前瞻版本返回 m 而不是 a ?