我有一个可能很大的文本块来搜索实例[[...]],其中...可以是任何东西,包括其他括号(虽然它们不能嵌套; ]]后面的第一个实例[[结束匹配).
我可以想到两种方法来匹配这个文本:
/\[\[.+?\]\]//\[\[(?:(?!\]\]).)+\]\]/从性能的角度来看,一种选择本质上比另一种更好(我说第一种可能更具可读性)?我记得读过最好不要使用非贪婪的限定符,但我现在找不到它的来源.
码:
str = '<br><br />A<br />B'
print(re.sub(r'<br.*?>\w$', '', str))
Run Code Online (Sandbox Code Playgroud)
它应该返回<br><br />A,但它返回一个空字符串''!
有什么建议吗?
我有一个输入字符串,如"=== text ===和=== text ===",我想用相应的html标签替换wiki语法.
输入:
===text=== and ===text===
Run Code Online (Sandbox Code Playgroud)
理想输出:
<h1>text</h2> and <h1>text</h2>
Run Code Online (Sandbox Code Playgroud)
但是使用以下代码我得到了这个输出:
var regex = new Regex("---(.+)---");
var output = regex.Replace("===text=== and ===text===", "<h1>$1</h1>");
<h1>text=== and ===text</h1>
Run Code Online (Sandbox Code Playgroud)
我知道问题是我的正则表达式与贪婪相匹配.但是如何让他们不贪心.
谢谢你,亲切的问候.丹尼
我有一个像这样结构的文件:
A: some text
B: more text
even more text
on several lines
A: and we start again
B: more text
more
multiline text
Run Code Online (Sandbox Code Playgroud)
我试图找到将这样拆分我的文件的正则表达式:
>>>re.findall(regex,f.read())
[('some text','more text','even more text\non several lines'),
('and we start again','more text', 'more\nmultiline text')]
Run Code Online (Sandbox Code Playgroud)
到目前为止,我最终得到了以下内容:
>>>re.findall('A:(.*?)\nB:(.*?)\n(.*?)',f.read(),re.DOTALL)
[(' some text', ' more text', ''), (' and we start again', ' more text', '')]
Run Code Online (Sandbox Code Playgroud)
多线文本没有被捕获.我想是因为懒惰的限定符真的很懒,什么都没有,但我把它拿出来,正则表达式变得非常贪婪:
>>>re.findall('A:(.*?)\nB:(.*?)\n(.*)',f.read(),re.DOTALL)
[(' some text',
' more text',
'even more text\non several lines\nA: and we start again\nB: more text\nmore\nmultiline text')]
Run Code Online (Sandbox Code Playgroud)
有人有想法吗?谢谢 !
我有两个句子作为输入.比方说,举个例子:
<span>I love my red car.</span>
<span>I love my car.</span>
Run Code Online (Sandbox Code Playgroud)
现在我想匹配span-tags内的每个textpart(如果有颜色).
如果我使用以下正则表达式:
/<span>(.*?)(?P<color>red)(.*?)<\/span>/ms
Run Code Online (Sandbox Code Playgroud)
仅匹配具有颜色的线.所以我想让我们使用?-operator(一个或零).
/<span>(.*?)(?P<color>red)?(.*?)<\/span>/ms
Run Code Online (Sandbox Code Playgroud)
现在两个行/句子都将匹配.可悲的是,颜色不再匹配了.
问题是为什么?通过使用 ".*?" 在颜色部分之前,我以为我已经使正则表达式非贪婪,所以颜色部分会匹配,如果它存在的话.但正如所说,它不......
我试图通过终端获取此xml行中值条目的值,所以我使用sed.
abcs='<param name="abc" value="bob3" no_but_why="4"/>'
echo $abcs | sed -e 's/.*value="\(.*\)" .*/\1/'
echo $abcs | sed -e 's/.*value="\(.*\)".*/\1/'
Run Code Online (Sandbox Code Playgroud)
输出是:
bob3
bob3" no_but_why="4
Run Code Online (Sandbox Code Playgroud)
为什么没有空间的第二种方式导致的不仅仅是我想要打印出来的?为什么\ 1会受到影响
如何使用 SSMS 2016 正则表达式替换功能删除行尾的额外空格和制表符?
编辑器内容示例:
select
'tab'
, 'space'
select
'tabs'
, 'spaces'
Run Code Online (Sandbox Code Playgroud)
目标:
select
'tab'
, 'space'
select
'tabs'
, 'spaces'
Run Code Online (Sandbox Code Playgroud)
在 SSMS 2012 中查找字符串:b*$匹配那些额外的制表符和空格,并允许我用空替换它们。SSMS 2016 开始为查找/替换功能使用某种 .net 正则表达式语法。使用\s+$几乎在 2016 年有效,但它删除了空行。
我正在尝试匹配所有以 开头的 URI,#/tool_[a-z\-]+# 除非后跟/public. 比如/tool_calculator什么的。
例如,如果 URI 以/tool_store-front或开头,/tool_store-front/anything-but-public那么我想将它们重定向到 HTTPS。因此,/tool_store-front/public将不会重定向。
这是我所拥有的,但它不起作用
RewriteCond %{HTTPS} =off
RewriteCond %{REQUEST_URI} ^/?tool_[a-z-]+(?!/public.+) [OR]
RewriteCond %{REQUEST_URI} ^/?secure
RewriteCond %{REQUEST_URI} !^/?secure/public/info
RewriteRule ^(.*)$ https://www.example.org%{REQUEST_URI} [NC,L]
Run Code Online (Sandbox Code Playgroud) 我需要找到字符串中字符集的最后一个索引。考虑字符集为x,y,z和string作为Vereador Luiz Pauly Home,那么我需要index为18。
因此,寻找索引我已经创建了一个模式DOTALL标志和贪婪量词为*(S?)。(X | Y | Z) 。当模式应用于该字符串(多行)时,我可以从起始组中找到索引。代码:
int findIndex(String str){
int index = -1;
Pattern p = Pattern.compile("(?s).*(x|y|z)");
Matcher m = regex.matcher(str);
if(m.find()){
index = m.start(1);
}
return index;
}
Run Code Online (Sandbox Code Playgroud)
如预期的那样,如果匹配,它将正确返回值。
但是,如果没有匹配项,则它花费的时间太长(600000个字符需要17分钟),因为它是贪婪的匹配项。
我尝试了其他量词,但无法获得所需的输出。那么,谁能推荐更好的正则表达式呢?
PS:我也可以考虑从最后遍历内容并找到索引。但是我希望正则表达式中有更好的方法可以快速完成工作。
regex ×10
regex-greedy ×10
greedy ×2
python ×2
.htaccess ×1
bash ×1
c# ×1
java ×1
mod-rewrite ×1
multiline ×1
non-greedy ×1
performance ×1
php ×1
sed ×1
shell ×1
ssms ×1
ssms-2016 ×1