我想在TextWrangler中使用正则表达式来查找这些HTML字体颜色标记之间的小写字母,后跟大写字母。例如:
<font color =#0B610B> Word word wordWord </font>
<font color =#C0C0C0> Word word wordWord </font>
事实上,我希望它们被冒号分割为:
<font color =#0B610B> Word word word: Word </font>
<font color =#C0C0C0> Word word word: Word </font>
我用过:
<font color =#0B610B\b[^>]*>(.*?)</font>
但它找到了font-color标签之间的所有内容
我也尝试过:
<font color =#0B610B\b[^>]*>([a-z])([A-Z])</font>
但它不起作用。
有人能帮帮我吗?非常感谢你。
答案 0 :(得分:0)
如何做一个积极的展望,像这样
[a-z](?=[A-Z])
我没有text wrangler
,但您可以使用此功能并匹配该字词并添加colon
和space
。我在regex
中对此perl
进行了测试,看起来没问题。
[jaypal:~/Temp] cat temp
<font color =#0B610B> Word word wordWord </font>
<font color =#C0C0C0> Word word wordWord </font>
[jaypal:~/Temp] perl -pe 's/([a-z])(?=[A-Z])/$1: /' temp
<font color =#0B610B> Word word word: Word </font>
<font color =#C0C0C0> Word word word: Word </font>
答案 1 :(得分:0)
试试这个
<font.*?>.*?[a-z][A-Z].*?</font>
答案 2 :(得分:0)
这个怎么样:
<font[^>]*>[^<>]*([a-z][A-Z])[^<>]*</font>
答案 3 :(得分:0)
我认为你不能在一个单一的Regex表达式中做到这一点,但如果你可以循环使用它:
<script type="text/javascript">
function checkscript() {
var content = document.regexForm.input.value;
//match any HTML tag (you could specify font)(not an opening tag)(lowercase)(uppercase)(not an opening tag)
while(content.match(/(<[^>]*?>)([^<]*)([a-z])([A-Z])([^<]*)/))
{
content = content.replace(/(<[^>]*?>)([^<]*)([a-z])([A-Z])([^<]*)/g,"$1$2$3: $4$5");
}
document.regexForm.output.value = content;
}
</script>
<body>
<form name="regexForm">
<textarea rows="10" cols="50" name="input">
<font color =#0B610B> Word myWord<BR> wordWord </font>
<font color =#C0C0C0> Word word wordWord </font>
</textarea>
<BR>
<input type=button value="run test regex" onClick="checkscript();return true;">
<BR><textarea rows="10" cols="50" name="output"></textarea>
</form>
这样:
<font color =#0B610B> Word myWord<BR> wordWord </font>
<font color =#C0C0C0> Word word wordWord </font>
变为:
<font color =#0B610B> Word my: Word<BR> word: Word </font>
<font color =#C0C0C0> Word word word: Word </font>
答案 4 :(得分:0)
此问题尚未标记为已回答。如果您还没有找到合适的答案,可以试试这个:
鉴于以下示例,只有第1,2和3行应与您的条件“匹配”。第4行应 NOT 匹配,因为没有“小写 - 大写”组合。第5行也应该不匹配,因为字体颜色(#FFFFFF)与您指定的不匹配(在OP和后续注释中)。
<font color =#0B610B> Word word wordWord </font>
<font color =#C0C0C0> Word word wordWord </font>
<font color =#C0C0C0> wordWord wordWordwordWord </font>
<font color =#0B610B> word word word Word Word Word Wordword </font>
<font color =#FFFFFF> Word word wordWord </font>
搜索词可以这样写:
(?<=font color =#(?:0B610B|C0C0C0)>)((?:(?!</font>|[\r\n]).)*[a-z])([A-Z])
替换术语可以这样写:
\1: \2
搜索词有几个嵌套括号。第一个,(?<...)
在左侧找到“”标签,然后从右侧开始搜索。 (?:0B610B|C0C0C0)
找到您指定的字体颜色(您可以通过添加更多“|”管道来添加更多),并且不会将它们存储在其中一个\ #register中(如\ 1或\ 2)。
然后有3个开放(
。第一个是匹配组, 将 与\1
匹配。第三个(现在跳过第2个)看起来像(?!...)
将看起来当前搜索模式右侧的字符不是结束</font>
标记,也不是任何类型的换行符。当该条件为真时,.
字符会将搜索前进到下一个字符,然后再次检查以确保找不到</font>
。它会在找到</font>
结束标记之前执行此操作。
第二个(?:...)
组的原因是我们不希望将搜索结果传递到任何寄存器:我们希望“&lt; font&gt; ...&lt; / font&gt;标记之间的所有内容“,但实际上不包括标签。
最后,在替换术语中,我们粘贴&lt; font&gt;右侧的文本部分。标记,第一次出现的单词是小写的,并且在同一个单词命中大写字符之前。然后它只是进入一个冒号,一个空格,并结束。对于单行包含wordWordWordWord
的情况,您可能需要多次运行此替换。