标签: regex-greedy

正则表达式是懒惰还是非贪婪?

我原来听说它不合情理.然后在网上的引用'我看到它被称为懒惰.这是什么?

regex greedy regex-greedy

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

仅左侧的正则表达式贪婪(.net)

我正在尝试捕获两个字符串之间的匹配项。

例如,我正在寻找出现在 Q 和 XYZ 之间的所有文本,使用“最快”匹配(不继续向外扩展)。这个字符串:

马戏团 Q 你好Q SOMETEXT XYZ今天是 XYZ 的一天 XYZ

应该返回:

Q 某些文本 XYZ

但相反,它返回:

Q 你好 Q SOMETEXT XYZ

这是我使用的表达式: Q.*?XYZ

回到左边太远了。当我在星号后面使用问号时,它在骑行方面工作正常。我怎样才能对左侧做同样的事情,并在我击中第一个左 Q 后停止,使其与右侧的工作相同?我已经尝试过http://msdn.microsoft.com/en-us/library/az24scfc.aspx 中的问号和其他符号,但有些东西我只是想不通。

我是一个正则表达式新手,因此对这方面的任何帮助将不胜感激!

.net c# regex non-greedy regex-greedy

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

Postgres Regex贪婪控制

要更改文本周围的标签对,此Postgres SELECT表达式适用于我:

select regexp_replace('The corpse of the huge <i>fin whale</i> created a spectacle on <span class="day">Friday</span> as <i>people</i> wandered the beach to observe it.',
                      '(<i>)([^/]+)(</i>)',
                      '<em>\2</em>',
                      'g');
Run Code Online (Sandbox Code Playgroud)

我担心参考文献二过分贪婪。我第一次尝试使用参考号2是(。+),但是失败了。([^ /] +)效果更好。但我想知道它是否足够好。

可以做些什么使该SELECT语句更可靠吗?

regex postgresql regex-greedy

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

正则表达式仅查找第一个匹配项

我有这样的文字: -

SOME text, .....
Number of successes: 3556
Number of failures: 22
Some text, .....
Number of successes: 2623
Number of failure: 0
Run Code Online (Sandbox Code Playgroud)

我的要求是找到这种模式的第一次出现"成功次数:(\ d +)",这是成功次数:3556.但是上面的表达式也会返回后续匹配.

我希望正则表达式为我做这个,不像在java中我可以使用循环来迭代.

任何人都可以帮我一个只能找到第一次出现的正则表达式.

regex search text-search regex-greedy regex-lookarounds

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

Tcl贪婪的子表达式+和*之间的差异

我试图理解Tcl子表达式匹配和"贪婪",并且完全难以理解正在发生的事情.参考http://wiki.tcl.tk/396上的示例:

%regexp -inline (.*?)(n+)(.*) ennui
en e n {} 
%regexp -inline ^(.*?)(n+)(.*)$ ennui
ennui e nn ui
Run Code Online (Sandbox Code Playgroud)

尽管我没有完全理解"嵌套表达式"(这是括号表示的,对吗?)匹配,但我决定从小开始,尝试将*和+之间的区别作为贪婪的运算符:

% regexp -inline (.*)(u*)(.*) ennui
ennui ennui {} {}
% regexp -inline (.*)(u+)(.*) ennui
ennui enn u i
Run Code Online (Sandbox Code Playgroud)

如果*匹配零或更多,+匹配一个或多个,我不明白两个命令之间输出的差异.为什么u*和u +在同一个字符串上产生两个不同的结果?

我觉得这是一个非常重要的细微差别 - 如果我能掌握这个简单模式匹配/正则表达式中正在发生的事情,我的生活将会变得完整.救命!

提前致谢.

regex tcl regex-greedy

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

。*与^的非贪婪匹配

给定字符串:

s = "Why did you foo bar a <b>^f('y')[f('x').get()]^? and ^f('barbar')^</b>"
Run Code Online (Sandbox Code Playgroud)

如何用字符串替换^f('y')[f('x').get()]^^f('barbar')^,例如PLACEXHOLDER

所需的输出是:

Why did you foo bar a <b>PLACEXHOLDER? and PLACEXHOLDER</b>
Run Code Online (Sandbox Code Playgroud)

我试过了,re.sub('\^.*\^', 'PLACEXHOLDER', s).*贪婪,它匹配,^f('y')[f('x').get()]^? and ^f('barbar')^并输出:

您为什么foo禁止PLACEXHOLDER

可能存在多个未知数字的子字符串,这些子字符串由进行编码,\^因此不希望这样做:

re.sub('(\^.+\^).*(\^.*\^)', 'PLACEXHOLDER', s)
Run Code Online (Sandbox Code Playgroud)

python regex placeholder non-greedy regex-greedy

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

电话号码的 Python 正则表达式

我对正则表达式很陌生,正在寻求帮助从 HTML 文本中解析出电话号码

在源站点,html 标签非常扭曲,并且没有任何我可以使用的唯一选择器。下面是我要解析的可能性列表。

raw = """+49 39291 55-217
02102 7007064
0152 01680970
+49 39291 55-216
02102 3802 22
0800 333004 451-100
+49 221 9937 26950
02151-47974510
+49(0)6105 937 -539
0211/409 2268
+49(0)6105 937 -539
+49211/584-623
0211 58422 2012
+49 (9131) 7-35335
+49 521 9488 2470
+ 49-40-70 70 84 - 0
0211 17 95 99 04
02151-47974327
+49 203 28900 1121
0211 9449-2555
+49 (5 41) 9 98 -2268"""
Run Code Online (Sandbox Code Playgroud)

我试过这种模式,但无法从中了解更多

import re, requests

Phones = re.findall(re.compile(r'.*?(\(?\d{3}\D{0,3}\d{3}\D{0,3}\d{4}).*?'),raw)

phones
['102 …
Run Code Online (Sandbox Code Playgroud)

python regex python-3.x regex-greedy

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

为什么我的Perl正则表达式不匹配简单的主机名?

我无法提取可能同时是FQDN和简单主机名的主机名

例如,使用sed它可以正常工作:

echo test_serv1.TEST-Site-1.test.com|sed 's/\..*//'
test_serv1
echo test_serv1|sed 's/\..*//'
test_serv1
Run Code Online (Sandbox Code Playgroud)

但是在Perl中我只得到它的FQDN:

my $t='test_serv1.TEST-Site-1.test.com';
my ($res) = $t=~ /^(.*?)\./;
print "$res\n";
Run Code Online (Sandbox Code Playgroud)

我为test_serv1尝试了不同的组合,但它不起作用,为什么?

regex perl regex-greedy

0
推荐指数
1
解决办法
695
查看次数

非空字符串的正则表达式和按字母顺序排列的3个字母

我试图写一个3字母的字母字符串,不是空的正则表达式.我尝试了以下内容

(?=(^$)|(\s+$))(?=[A-Z]{3})
Run Code Online (Sandbox Code Playgroud)

我知道?=作为和操作符,(^$)|(\s+$)检查非空和空格,但以下正则表达式不起作用.无法找出这方面的错误.任何帮助,将不胜感激.

我的正则表达式应首先检查字符串是否为空,如果字符串不为空,则应检查字符串是否为字母,长度为3以下是示例

1." - 应该失败

2."LGW" - 应该通过

3."LGWE" - 应该失败

4."LG!@" - 应该失败

5."12L" - 应该失败

regex regex-negation regex-greedy

0
推荐指数
1
解决办法
549
查看次数

如何获得URL的一部分?

如何从网址中删除除基本网址和第一部分以外的所有部分。零件数量不确定。基本网址是可变的。我尝试了一些正则表达式,但没有成功。

$url =  http://www.example.com/part1/part2/part3/part4;
base_url = parse_url($url, PHP_URL_HOST); // Outputs www.example.com

$desired_output = http://www.example.com/part1;
Run Code Online (Sandbox Code Playgroud)

php regex preg-replace regex-group regex-greedy

0
推荐指数
1
解决办法
57
查看次数