我有一份大文件。让我们把它缩放到
location=State-City-House
location=City-House
所以我想做的是用一些其他字符串替换所有那些不以State开头的东西。说“纽约”。但那些从国家开始的人必须保持不变。
所以我的最终结果将是
location=State-City-House
location=NY-City-House
1.显然我不能使用String.replaceAll()。
2.使用Pattern.matcher()是棘手的,因为我们使用两种不同的模式,其中必须找到一个,一个不能找到。
3.用一种肮脏的方式首先用“bocation = State”替换“location = State”然后替换其他的然后重新替换。
那么,一个简洁明了的方法呢?
答案 0 :(得分:3)
你绝对可以使用replaceAll
作为否定前瞻:
String repl = input.replaceAll( "(?m)^(location=)(?!State)", "$1NY-" );
(?m)
设置MULTILINE
修饰符,以便我们匹配每行中的锚点^
和$
(location=)
匹配location=
并捕获组#1 (?!State)
是在捕获的组#1即State
location=
时未通过匹配的否定前瞻
$1NY-
将其设为location=NY-
。答案 1 :(得分:0)
如果我理解你的意图,你实际上并没有字符串" State"在您的输入中,但代表状态的变化字符串。 但是你的一些文本行完全错过了州,只有城市和众议院的名字。那是对的吗?在这种情况下,两种线之间的定义特征是破折号。
^location=([^-]+)-([^-]+)$
上述正则表达式仅匹配仅有1个短划线的完整行。
我可能误解了这个任务。如果您发布一些实际输入会更容易。