开头我正在解析一个文本文件,在每一行中运行,并且我在计算正则表达式时遇到了困难。部分解析涉及到发生的变化,如:正则表达式,找到一个字符串包含但不是以
& Eacute;到& eacute;
我试过以下的正则表达式,但它不返回任何东西:
/^(?!&)(É)/
有什么建议?
开头我正在解析一个文本文件,在每一行中运行,并且我在计算正则表达式时遇到了困难。部分解析涉及到发生的变化,如:正则表达式,找到一个字符串包含但不是以
& Eacute;到& eacute;
我试过以下的正则表达式,但它不返回任何东西:
/^(?!&)(É)/
有什么建议?
所以,只有当它不在行首时,你才想匹配É
?
使用
/(?<=.)É/
(假设Ruby 1.9的,因为1.8不支持回顾后)
理由:.
匹配除换行符任何字符。因此,如果lookbehind断言匹配,我们不在该行的开头。
是的,这是诀窍:) – agmcleod 2011-05-03 20:41:13
'(?!^)'应该可以在任何版本中工作。 – 2011-05-04 11:29:32
如果要上线的任何位置匹配É
,但不是在第一个位置:
/^.+(É)/
此例如匹配"abcÉdef"
,但不是"É"
更新:修正了错误,指出由Tim
这不起作用。它只在'&Eacute;'位于该行的位置2时才匹配。 – 2011-05-03 20:56:28
@Tim你是对的,复制并粘贴错误。修复。非常感谢。 – 2011-05-04 06:21:06
现在它只匹配在'&Eacute'之前在同一行上没有其他HTML实体... – 2011-05-04 06:29:02
如果您在使用Ruby 1.9,你可以使用一个回顾后是这样的:
t.gsub! /(?<=.)É/, 'é'
在Ruby 1.8,你需要使用类似的方法:
while t =~ /(.)É/
t.sub! /(.)É/, "#{$1}é"
end
其中t是要修改的字符串。
't.gsub! /(?!^)&Eacute; /,'&eacute;'在Ruby 1.8中运行良好。 – 2011-05-04 11:33:21
当你设计一个正则表达式时,你不能使用“发生如”。你在寻找什么样的特定模式?它会一直是'&E'吗?你是否总是把它改成'&e'? – eykanal 2011-05-03 20:34:21
假设我有以下几行:H&Eacute; llo。我想改变它,所以它是一个小写的e。但是,如果线条以此开始,我不想更改它,因为我宁愿将其大写。我正在使用String类的gsub方法进行替换。 – agmcleod 2011-05-03 20:35:36
你想得到什么? – fl00r 2011-05-03 20:35:58