我一直在努力研究这个,但我很难找到相关的帖子。我们使用配置文件作为我们的服务之一,如下所示(注意,一些名称在哈希后有空格,有些名称有参数):
#GetContactDetails
GetContactDetails.XXXXUser=USERNAME
GetContactDetails.XXXXPassword=PASSWORD
GetContactDetails.TestFlag=Y
GetContactDetails.EndPointURL=http://111.99.111.999/ENVNAME2/endpoint.xx
GetContactDetails.Timeout=40000
GetContactDetails.LoggingFlag=Y
# GetContactDetails
GetContactDetails.XXXXUser=USERNAME
GetContactDetails.XXXXPassword=PASSWORD
GetContactDetails.TestFlag=Y
GetContactDetails.EndPointURL=http://111.99.111.999/ENVNAME2/endpoint.xx
GetContactDetails.Timeout=40000
GetContactDetails.LoggingFlag=Y
# GetContactDetails Parameters
GetContactDetails.XXXXUser=USERNAME
GetContactDetails.XXXXPassword=PASSWORD
GetContactDetails.TestFlag=Y
GetContactDetails.EndPointURL=http://111.99.111.999/ENVNAME2/endpoint.so
GetContactDetails.Timeout=40000
GetContactDetails.LoggingFlag=Y
基本上有4种不同的变体:
#servicename
# servicename
#servicename parameters
# servicename parameters
我希望能够在此文本文件上运行替换,为我留下每个服务的名称(只是以#开头的行)。意思是我需要识别任何不等于#行模式的东西。我尝试过的所有组合,我都无法识别其他所有组合。
有什么建议吗?
P.S。 (来自评论)
我希望使用正则表达式,因为现有的Java服务可以使用正则表达式替换。沿着这条路走下去需要编写一个Java服务并部署它,尽管不是太大的任务,但我想尽可能避免它。
答案 0 :(得分:1)
Search: ^[^#].*[\r\n]*
Replace: <blank>
关键部分是^[^#]
,这意味着“第一个字符不是哈希”
您需要[\r\n]*
也匹配换行符(点与换行符不匹配),否则您将留下空行(而不是删除它们)。
答案 1 :(得分:1)
在Java中,此任务的最佳方法是逐行读取文件并收集以#
开头的行。
如果要将正则表达式应用于整个文件内容,则应为
.replaceAll("(?m)^(?!#).*[\r\n]*", "")
请参阅regex demo
<强>解释强>:
(?m)^
- 行的开头((?m)
是内联修饰符,使^
匹配行的开头,而不是字符串)(?!#)
- 确保该行的第一个符号不是#
(如果是,则不返回匹配项).*
- 除换行符之外的零个或多个符号[\r\n]*
- 零个或多个CR或LF符号(在Java 8中,可以用"\\R*"
替换)对于您的确切环境,我认为您可以使用
[^#].*
并且 - 也匹配空字符串 - 如果它们可以在那里删除:
^$
你说[^#].*\..*
对你有用。这是它实际做的:
[^#]
- 匹配#
.*
- 尽可能多地匹配除换行符之外的1个或多个字符\.
- 文字.
.*
- 匹配除换行符之外的1个或多个字符,直到行尾。答案 2 :(得分:1)
另一种解决方案:
#\s?(\w+)\s?(\w+)?
在记事本中++ ctrl + h-&gt;粘贴代码 - &gt;替换为&#39; &#39;
答案 3 :(得分:0)
以下似乎可以正常用于预期目的。在此处发布以防对浏览此问题的任何人都有用。感谢所有帮助&amp;建议。
[^#].*\..*