标签: regex-lookarounds

正则表达式匹配中的固定字符数

有没有办法通过正则表达式匹配固定长度字符串中固定数量的字符?

例如,我想匹配字符串长度为 5 并且正好有 3 个字母和 2 个感叹号 (!) 的所有字符串。感叹号可以位于字符串中的任何位置。

匹配示例:abc!!、a!b!c、!!abc、a!!bc

我尝试使用前瞻进行匹配,但无法限制长度。以下是我使用的正则表达式。

(?=\w*!\w*!\w*)[\w!]{5}
Run Code Online (Sandbox Code Playgroud)

这匹配 a!!!b 和 a!!!! 以及我不想要的。

regex regex-negation regex-lookarounds

3
推荐指数
1
解决办法
4812
查看次数

在结果中包含正向前瞻中的字符

Name: John
Surname: Doe
Age: 24
Run Code Online (Sandbox Code Playgroud)

当我做

Regex.Replace(str,"(?<=^|\n)(.*)(?=:)", "")    
Run Code Online (Sandbox Code Playgroud)

我明白了

: John
: Doe
: 24
Run Code Online (Sandbox Code Playgroud)

我想去掉冒号而不使用另一个替换

c# regex regex-lookarounds

3
推荐指数
1
解决办法
3169
查看次数

如果字符串包含超过 2 个小数,则用于替换字符串的 RegEx

我有这个用户价格输入,我想允许 0、1 或 2 个十进制数字。

  • 我使用逗号表示小数。
  • 我不使用也不允许千位分隔符。

题:

如果用户输入第三个十进制数字,我想替换输入。

类似于:

  • 5 还行吧
  • 5, 没关系,因为它在等待小数
  • 5,5 还行吧
  • 5,55 还行吧
  • 5,555 这不行,我想删除最后一位数字并返回 5,55
  • 5,555555555555 这也不行,用户可能会粘贴一些带有额外十进制数字的内容,我想将它们最多减少到 2 位小数,然后再次返回 5,55

我怎样才能做到这一点?

我知道如何匹配字符串的结尾: /[,\d+]$/

但是如何用逗号后的前两位数字替换?

javascript regex replace regex-group regex-lookarounds

3
推荐指数
1
解决办法
1960
查看次数

使用正则表达式查找上一期左侧和右侧的值并在 dplyr 中分隔

我有一个列名的数据框,如下所示:

[127] "quiz.32.player.submitted_answer_private"         "quiz.32.player.rescue_event"                    
[129] "quiz.33.player.solution"                         "quiz.33.player.submitted_answer"                
[131] "quiz.33.player.submitted_answer_private"         "quiz.33.player.rescue_event"                    
[133] "partner_quiz.1.player.solution"                  "partner_quiz.1.player.submitted_answer"         
[135] "partner_quiz.1.player.submitted_answer_private"  "partner_quiz.1.player.rescue_event"             
[137] "partner_quiz.2.player.solution"                  "partner_quiz.2.player.submitted_answer"         
[139] "partner_quiz.2.player.submitted_answer_private"  "partner_quiz.2.player.rescue_event"      
Run Code Online (Sandbox Code Playgroud)

我试图通过提取上一期右侧的值和它左侧的值来分离这些值。为此,我的 dplyr 管道如下:

frame <- data %>%
  gather(k, value) %>%
  separate(k, into = c("quiz_number", "suffix"), sep = "\\.(?=player)")
Run Code Online (Sandbox Code Playgroud)

出于某种原因,生成的 data.frame 省略了所有以“partner”为前缀的列。任何想法为什么?

编辑:生成的拆分应该在列quiz_number中包含上一期左侧的所有内容(例如 quiz.32.playerpartner_quiz.2.player),并在“后缀”列中包含上一期右侧的所有内容(例如submitted_answer_privatesolution

r regex-lookarounds dplyr

3
推荐指数
1
解决办法
81
查看次数

将作为序数的字母和数字组合在一起

目的是去除数字和序数缩写(st,rd,th,nd)之间的空格。

例如,以下数字和缩写应该一起形成 10th、1st 和 133rd:

10   th elementary
1  st grade
133  rd anniversary
Run Code Online (Sandbox Code Playgroud)

但是,不允许将这些其他示例设置在一起:

abc123 th 33333    rddccc
10 thetree
20 street
Run Code Online (Sandbox Code Playgroud)

为此,我提出了以下正则表达式:

(?<=[0-9])+\s+(?=(st|nd|rd|th)\b)
Run Code Online (Sandbox Code Playgroud)

然而,它也将之前不允许的字符串设置在一起。

你知道我怎样才能把正确的序数放在一起吗?

python regex regex-lookarounds

3
推荐指数
1
解决办法
323
查看次数

使用 perl 插入可能丢失的行

我正在尝试修改 perl 过滤器以插入可能丢失的行。

我可能有输入



Ç

或者


ç

A 和 B 是固定的并且预先知道。C 可能因文件而异。

实际数据更复杂 - 作为回归测试的一部分生成的调用堆栈。根据所使用的编译器(以及优化),可能会消除尾调用,这可以删除“B”帧。过滤后的文件只是简单地比较。

在第二种情况下,我想插入“B”行。在第一种情况下,我不想插入重复的行。我认为这是一个负面前瞻的工作,使用以下

s/A.(?!B)/A\nB/s;
Run Code Online (Sandbox Code Playgroud)

然而,这似乎意味着“如果 A.(?!B) 的任何部分与输入文本匹配,然后用 A\nB 替换它”,而我需要“如果所有 A.(?!B) 匹配”然后替换。

无论我尝试什么,它要么总是替代,要么从不替代。

regex perl regex-lookarounds

3
推荐指数
1
解决办法
115
查看次数

如何使用负向前查找(NOT Lookbehind)来匹配在特定位置不包含给定子字符串的字符串?

我想将某些文件类型(例如“.txt”)与不以特定子字符串结尾的非空根名称(例如“-bad”)进行匹配。有了消极的后向支持,解决方案很简单:

\n
/.(?<!-bad)\\.txt$/\n
Run Code Online (Sandbox Code Playgroud)\n

然而,Safari仍然不支持负向后查找。啊。如何使用负前瞻获得相同的结果?我想用一个正则表达式来做到这一点。请不要提供任何非正则表达式或多步骤解决方案。

\n

下面的测试代码显示我已经接近了,但一项测试仍然失败。

\n

\r\n
\r\n
/.(?<!-bad)\\.txt$/\n
Run Code Online (Sandbox Code Playgroud)\r\n
\r\n
\r\n

\n

\n

javascript regex safari regex-negation regex-lookarounds

3
推荐指数
1
解决办法
4350
查看次数

如何为以.php结尾的文件制作正则表达式?

我正在尝试编写一个非常简单的正则表达式,它匹配任何不以.php结尾的文件名.我想出了以下......

(.*?)(?!\.php)$
Run Code Online (Sandbox Code Playgroud)

...但是这匹配所有文件名.如果有人能指出我正确的方向,我将非常感激.

regex regex-negation regex-lookarounds

2
推荐指数
1
解决办法
7111
查看次数

适用于Chrome和Safari的正则表达式负面预测

我需要匹配Safari浏览器,而不是使用一个Regex的Chrome浏览器.我通常没有正则表达式的问题,但负面的前瞻让我难过.

/(?!chrome)(safari)/i.test("Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.5 (KHTML, like Gecko) Chrome/19.0.1084.56 Safari/536.5");
Run Code Online (Sandbox Code Playgroud)

无法弄清楚为什么会这样true.

javascript regex regex-lookarounds

2
推荐指数
1
解决办法
2157
查看次数

正则表达式匹配用分号和空格分隔的单词

我想编写一个正则表达式,以匹配多个由分号和可选的空格分隔的单词,或一个单独的单词而没有任何相邻的分号。

例如,我要匹配blabla ; bla,但我不想匹配:bla . blabla;,即,仅当分号出现在两个单词之间而不是字符串的末尾时,才应捕获分号。

regex regex-lookarounds

2
推荐指数
1
解决办法
6568
查看次数