有没有办法通过正则表达式匹配固定长度字符串中固定数量的字符?
例如,我想匹配字符串长度为 5 并且正好有 3 个字母和 2 个感叹号 (!) 的所有字符串。感叹号可以位于字符串中的任何位置。
匹配示例:abc!!、a!b!c、!!abc、a!!bc
我尝试使用前瞻进行匹配,但无法限制长度。以下是我使用的正则表达式。
(?=\w*!\w*!\w*)[\w!]{5}
Run Code Online (Sandbox Code Playgroud)
这匹配 a!!!b 和 a!!!! 以及我不想要的。
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)
我想去掉冒号而不使用另一个替换
我有这个用户价格输入,我想允许 0、1 或 2 个十进制数字。
题:
如果用户输入第三个十进制数字,我想替换输入。
类似于:
5 还行吧5, 没关系,因为它在等待小数5,5 还行吧5,55 还行吧5,555 这不行,我想删除最后一位数字并返回 5,555,555555555555 这也不行,用户可能会粘贴一些带有额外十进制数字的内容,我想将它们最多减少到 2 位小数,然后再次返回 5,55我怎样才能做到这一点?
我知道如何匹配字符串的结尾: /[,\d+]$/
但是如何用逗号后的前两位数字替换?
我有一个列名的数据框,如下所示:
[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.player和partner_quiz.2.player),并在“后缀”列中包含上一期右侧的所有内容(例如submitted_answer_private和solution)
目的是去除数字和序数缩写(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)
然而,它也将之前不允许的字符串设置在一起。
你知道我怎样才能把正确的序数放在一起吗?
我正在尝试修改 perl 过滤器以插入可能丢失的行。
我可能有输入
甲
乙
Ç
或者
一
ç
A 和 B 是固定的并且预先知道。C 可能因文件而异。
实际数据更复杂 - 作为回归测试的一部分生成的调用堆栈。根据所使用的编译器(以及优化),可能会消除尾调用,这可以删除“B”帧。过滤后的文件只是简单地比较。
在第二种情况下,我想插入“B”行。在第一种情况下,我不想插入重复的行。我认为这是一个负面前瞻的工作,使用以下
s/A.(?!B)/A\nB/s;
Run Code Online (Sandbox Code Playgroud)
然而,这似乎意味着“如果 A.(?!B) 的任何部分与输入文本匹配,然后用 A\nB 替换它”,而我需要“如果所有 A.(?!B) 匹配”然后替换。
无论我尝试什么,它要么总是替代,要么从不替代。
我想将某些文件类型(例如“.txt”)与不以特定子字符串结尾的非空根名称(例如“-bad”)进行匹配。有了消极的后向支持,解决方案很简单:
\n/.(?<!-bad)\\.txt$/\nRun Code Online (Sandbox Code Playgroud)\n然而,Safari仍然不支持负向后查找。啊。如何使用负前瞻获得相同的结果?我想用一个正则表达式来做到这一点。请不要提供任何非正则表达式或多步骤解决方案。
\n下面的测试代码显示我已经接近了,但一项测试仍然失败。
\n/.(?<!-bad)\\.txt$/\nRun Code Online (Sandbox Code Playgroud)\r\n\n 我正在尝试编写一个非常简单的正则表达式,它匹配任何不以.php结尾的文件名.我想出了以下......
(.*?)(?!\.php)$
Run Code Online (Sandbox Code Playgroud)
...但是这匹配所有文件名.如果有人能指出我正确的方向,我将非常感激.
我需要匹配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.
我想编写一个正则表达式,以匹配多个由分号和可选的空格分隔的单词,或一个单独的单词而没有任何相邻的分号。
例如,我要匹配bla和bla ; bla,但我不想匹配:bla . bla或bla;,即,仅当分号出现在两个单词之间而不是字符串的末尾时,才应捕获分号。
regex ×9
javascript ×3
c# ×1
dplyr ×1
perl ×1
python ×1
r ×1
regex-group ×1
replace ×1
safari ×1