我正在尝试捕获两个字符串之间的匹配项。
例如,我正在寻找出现在 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 中的问号和其他符号,但有些东西我只是想不通。
我是一个正则表达式新手,因此对这方面的任何帮助将不胜感激!
要更改文本周围的标签对,此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语句更可靠吗?
我有这样的文字: -
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中我可以使用循环来迭代.
任何人都可以帮我一个只能找到第一次出现的正则表达式.
我试图理解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 +在同一个字符串上产生两个不同的结果?
我觉得这是一个非常重要的细微差别 - 如果我能掌握这个简单模式匹配/正则表达式中正在发生的事情,我的生活将会变得完整.救命!
提前致谢.
给定字符串:
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) 我对正则表达式很陌生,正在寻求帮助从 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) 我无法提取可能同时是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尝试了不同的组合,但它不起作用,为什么?
我试图写一个3字母的字母字符串,不是空的正则表达式.我尝试了以下内容
(?=(^$)|(\s+$))(?=[A-Z]{3})
Run Code Online (Sandbox Code Playgroud)
我知道?=作为和操作符,(^$)|(\s+$)检查非空和空格,但以下正则表达式不起作用.无法找出这方面的错误.任何帮助,将不胜感激.
我的正则表达式应首先检查字符串是否为空,如果字符串不为空,则应检查字符串是否为字母,长度为3以下是示例
1." - 应该失败
2."LGW" - 应该通过
3."LGWE" - 应该失败
4."LG!@" - 应该失败
5."12L" - 应该失败
如何从网址中删除除基本网址和第一部分以外的所有部分。零件数量不确定。基本网址是可变的。我尝试了一些正则表达式,但没有成功。
$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) regex ×10
regex-greedy ×10
non-greedy ×2
python ×2
.net ×1
c# ×1
greedy ×1
perl ×1
php ×1
placeholder ×1
postgresql ×1
preg-replace ×1
python-3.x ×1
regex-group ×1
search ×1
tcl ×1
text-search ×1