问题标签 [regex-alternation]

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 投票
1 回答
474 浏览

regex - 在正则表达式中使用静态字符串一次,同时使用两种模式 OR

这是我的正则表达式:

如您所见,有两种模式,它们\s[a-zA-Z]:\\[\\\S|*\S]?.*$与运算符\s\w*相结合|。并且STATICSTRING在每个中都重复。

有没有办法写STATICSTRING一次?

0 投票
1 回答
78 浏览

regex - 包含子字符串且没有空格的正则表达式模式

我想在 Angular 中验证输入表单,字符串必须包含子字符串:

或者

例如:

对于前 3 个,我有一些工作模式:

但这并不能验证第四个。

0 投票
3 回答
172 浏览

regex - 使 sed 正则表达式交替遵循从左到右的优先级?

我正在尝试使用正则表达式从 格式化一些二进制文件xxd -b,但为了简单地演示这一点,我将向您展示我期望发生的事情:

要删除的正则表达式:/1x|1.*/

文本:1x21y3333333313333->2

如果所有出现的1x都被删除,那么从第一个 1 开始出现的所有内容都应该被删除。发生了什么应该立即显而易见,但如果不是,请使用 this。关键是如果1x匹配,则应该中止模式的其余部分。

这是echo "AA" | xxd -b(的绑定转储AA\n)的输出:

我的目标是 1. 删除每个字节的第一个 0(ascii = 7 位)和 2. 删除字符串的其余部分,以便只保留实际的二进制文件。所以我把它输入sed 's/ 0//g'

添加第二步,sed -E 's/ 0| .*//g'

显然,我希望得到:

我尝试过但没有完成工作的事情:

  • xxd可以-g0合并列,但它保留每个字节中的第一个零(每个字符占用一个字节,而不是 7 位)
  • -r

与此同时,我将使用 perl,但这种行为让我感到困惑,也许这里有一个原因(教训)?

0 投票
1 回答
75 浏览

c# - 如何在字符串中搜索值并转换值

我有一个 API 接受在进入服务器之前需要正确格式化的字符串。

进入服务器的格式如下

客户可能发送的几种可能性:

转换用户输入后的几个有效示例是:

转换器将输入排列成正确的顺序。hrs 总是以句点结尾并在句子外重新排列 ({Month Year}),如图所示。

到目前为止我有

这是通过我需要重构.. +“”就像懒惰程序员的空守卫

0 投票
1 回答
121 浏览

php - 用于捕获字符串中的数字的正则表达式 (PHP)

我正在提取工作编号并将它们与 mysql 数据库中的数据进行匹配,然后检索匹配的数据。

如果我的工作编号是,123456那么它匹配得很好,我得到了结果。有些是123-456有些是12-text有些是12-text-345

我尝试匹配变量,但那是无效的。我尝试在 PHPMyAdmin 中更改 SQL,但它甚至无法顺利运行。我用谷歌搜索并认为我应该使用 RegExp。我试过了。我可以添加一个斜线并使其适用于单个项目,但是,我不知道连字符在大量数组中的位置。它可能是第三个或第四个字符。我尝试了 pregmatch,但我认为我不知道我在做什么。我正在寻找几行代码来分析 PHP 变量并检测和转义任何元字符(如果有的话)。教程链接也可以,我很感激任何帮助

0 投票
1 回答
88 浏览

regex - 在 Notepad++ 中通过正则表达式匹配单行注释

为什么这两个正则表达式在 Notepad++ 中产生不同的结果?

  1. //.*?\n|//.*$|\s+|.(2场比赛→截图
  2. //.*?(?:\n|$)|\s+|.(3场比赛→截图

背景

我正在用 Perl 为 Delphi 编写一个原始词法分析器。目的是提取词(标识符和关键字),因此不需要正确识别各种标记。

它的核心是以下正则表达式:

\{[^}]*\}|\(\*([^*]|\*[^\\])*?\*\)|[A-Za-z_]\w*|\d+|//.*?$|'([^']|'')*?'|\s+|.

我偶然发现行尾没有被行注释占用。所以我很好奇我是否可以修改正则表达式,以便完全由行注释组成的两个连续行被计为 2 个“令牌”。

我用这个正则表达式替换//.*?$//.*?\n直接放在 EOF 之前的行注释(没有换行符)将不匹配,而是将其分解为//依此类推。所以我寻找正确的方式来正确表达交替。我发现两个在 Notepad++ 和 winGrep 中表现不同但在 Perl 中相同的正则表达式:

介绍性问题中已经显示了实际差异:

  1. \{[^}]*\}|\(\*([^*]|\*[^\\])*?\*\)|[A-Za-z_]\w*|\d+|//.*?\n|//.*?$|'([^']|'')*?'|\s+|.(上述示例源中有 2 个匹配项)

  2. \{[^}]*\}|\(\*([^*]|\*[^\\])*?\*\)|[A-Za-z_]\w*|\d+|//.*?(?:\n|$)|'([^']|'')*?'|\s+|.(上述示例源中的 3 个匹配项)

可以在 Notepad++(7.7.1 32 位)和 grepWin(1.9.2 64 位)中观察到。在 Perl 中,我将正则表达式放在 和 之间m@()@mg两者都有 2 个匹配项。

0 投票
0 回答
62 浏览

python - Python Regex:在某些条件下删除数字的替代方法

值得注意的是,正则表达式引擎一旦找到匹配项就会停止急切地搜索。然后,订单在某些情况下很重要,因为它不会继续检查交替中的剩余选项。

此正则表达式的目的是两个部分的复合:

  1. 删除字符串开头的数字,只要这些数字不在KINDER, SECONDARY, ELEMENTARY之前。这很简单,我们可以通过以下方式实现: /li>
  2. 将构成序数的数字和字母组合在一起(在此处解释)。举个例子,像10 stbecome这样的字符串10st,但是像abcdefg238947 thDO NOT change 这样的字符串。对应的正则表达式如下: 将这两个加在一起时会出现问题。我知道如果我首先设置第二条规则,那么引擎将成功并继续解析:

具有以下字符串,引擎应设置在一起1ST。然后1ST在 KINDER 之前拥有不应该匹配第二条规则,但事实并非如此:

更多示例:

如何在相同的正则表达式语句中将两个规则交替设置在一起,如果是序数,则优先将数字和字母放在一起,然后在开头检查数字?

我想要与以下相同的行为:

0 投票
1 回答
58 浏览

python - Python中的正则表达式:仅当不在列表中时将单词与数字分开(变量异常)

这个问题与这个有关。我想要变量异常,它可以接收字母数字变量列表或空值。

例如,我有一个虚拟函数,它返回可能的字母数字值,这些字母和数字必须保持在一起:

此外,我还有以下主要功能来获取那些不必分开的可能的字母数字值。如果文本变量(输入)在异常中有一个字母数字单词,那么这将不会被分隔,否则会添加空格:

但是,当 exception_rx 为空时,我会在每个字母之间留出空格:

是否可以在不包含任何 if 语句而仅使用正则表达式语法的情况下处理这种情况?

谢谢你的帮助

0 投票
1 回答
41 浏览

python - 正则表达式:交流发电机订单问题

在正则表达式中使用交替时,我们应该在交替器中包含项目,以避免受到引擎急切的影响。

然后,如果有一个列表,co,co.,co-op,association,assoc我们应该更喜欢包含它们以获得最精确的匹配。然后,这应该更改为association,assoc,co-op,co.,co.

如果包含连字符或斜杠,我有一个基本的正则表达式模式将一个单词分成两部分,所以我只得到连字符或斜杠之前的部分:

但是,此正则表达式在提供ABC CO-OP ELEMENTARY SCHOOL. 这个字符串正在变得公正ABC CO。但是,如果我从交流发电机中移除 CO,则字符串会以其正确的原始形式返回ABC CO-OP ELEMENTARY SCHOOL。另外,字符串ARMSTRONG CO-OP ELEMENTARY SCHOOL / ECOLE PRIMAIRE ARMSTRONG COOPERATIVE要断成ARMSTRONG CO-OP ELEMENTARY SCHOOL没有斜线后的字符串。

为什么CO在交流发电机中匹配并用于断弦?

0 投票
2 回答
80 浏览

python - 如何在带有交替的正则表达式中获取匹配的单词?

在python中,假设我想搜索字符串

对于模式的出现

我目前会这样做:

上面返回一个匹配对象,我可以从中检索字符串中匹配项的开始和结束索引,在本例中为 0 和 3。

我的问题是:如何检索与匹配的正则表达式中的特定单词

换句话说:我想得到“1.*”和“.23”。这可能吗?