Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 正则表达式来提取子字符串_Regex - Fatal编程技术网

Regex 正则表达式来提取子字符串

Regex 正则表达式来提取子字符串,regex,Regex,我放弃了。我不懂正则表达式,在过去的两天里,我一直在试图用glom来完成一个简单的任务。所以我会忍受所有的反对票,去问这个简单的(有些人可能会说愚蠢的)问题 我有一个字符串如下所示: path/to/the/file/text\u I\u want\u tokeep\u loremipsumdolorsitamet 换句话说,我想要介于第四个“/”和第四个“389;”之间的内容 如果您的回答没有任何解释,我们将不胜感激。如果您能给出解释,我们将不胜感激。:) 谢谢 这应该有效: .+/(.+)_

我放弃了。我不懂正则表达式,在过去的两天里,我一直在试图用glom来完成一个简单的任务。所以我会忍受所有的反对票,去问这个简单的(有些人可能会说愚蠢的)问题

我有一个字符串如下所示:
path/to/the/file/text\u I\u want\u tokeep\u loremipsumdolorsitamet

换句话说,我想要介于第四个“/”和第四个“389;”之间的内容

如果您的回答没有任何解释,我们将不胜感激。如果您能给出解释,我们将不胜感激。:)

谢谢

这应该有效:

.+/(.+)_.+

它基本上跳过任何字符,直到找到斜杠,捕获下一部分,直到它到达一个下划线,该下划线后面有其他内容。

您可以尝试类似的方法

正则表达式:
^(?:[^\/]+\/){4}\K(?:[^\]+}{3}[^\]+

1.
^
表示字符串的开头

2.
(?:[^\/]+\/){4}
[^\/]+\/
,此处
[^\/]+
将匹配所有,直到
/
\/
将匹配
/
并且
{4}
用于匹配此模式四次

3.
\K
这将重置当前匹配

4.
(?:[^.]+{3}[^.]+
,这里是
[^.]+
这将匹配除
{3}
之外的所有代码三次


注意:确保少数语言不支持
\K
,在这种情况下,您可以在
()
之后编写的表达式周围加上括号,使其成为捕获组


那么到目前为止你都试了些什么呢?我所试的就是在S.O.上找到“类似”的问题,然后随机调整答案并应用到我的数据中,试图找出什么起作用。我刚才得出的结论是我想不出来;我想从正则表达式教程的第1页开始。我会这样做,但我需要以更快的速度解决这个问题。@Steve你想把
loremipsumdolorsitamet
作为你的输出吗?您应该根据您使用的语言使用
分解
拆分
或等效方法。@Sahil:不,对不起。我不清楚。我想要
文本\u我想要\u保留
根据您的要求,应该足够了。根据您的示例字符串判断,.谢谢Juan!我现在有三个答案,都有解释,它们似乎都有效。我会从这件事中学到很多。真的很感激@史蒂夫:在研究这个模式时,请注意。@Sahil,@Juan:这个答案实际上给了我
text\u I\u want\u tokeep\u loremipsumdolorsitamet
而不是
text\u I\u want\u tokeep
我不这么认为@Steve。我自己测试过。:-)我看到我的答案被编辑了。我不知道为什么更改被接受,但斜杠不需要转义。@Steve试试这个。谢谢Sahil。我要接受这个。它在regex101中工作。特别感谢你的解释,这将帮助我学习。我现在必须弄清楚为什么stringr(R包)不会接受这种模式,但这是一个完全不同的问题,我可以自己解决!)@史蒂夫:欢迎。。我的朋友。。很高兴能帮助你……)@史蒂夫:在R中,使用
regmatches(x,regexpr(“^(?:[^/]+/){4}\\K(?:[^[u]+}{3}[^[u]+”,x,perl=TRUE))
。或
str_match(x,“^(?:[^/]+/){4}((?:[^.]+}{3}[^.]+)”)”