【问题标题】:How do I use regex to replace non-word chars in a specific piece of string?如何使用正则表达式替换特定字符串中的非单词字符?
【发布时间】:2009-05-05 17:42:23
【问题描述】:

我有这样一行的文本文件:

SendersTimeSeriesIdentification: COMPANY_A/COMPANY_B/REF_7/20090505

我想将值部分中的所有非单词字符替换为字符n,如下所示:

SendersTimeSeriesIdentification: COMPANYnAnCOMPANYnBnREFn7n20090505

但是文件中到处都有类似的字符串,它们必须保持不变。一个例子是:

MessageIdentification: REF_7/VER_1/20090505

我认为我必须使用lookbehind,我来了这个尝试(VB.NET):

Regex.Replace(fileContentString, "(?<=SendersTimeSeriesIdentification: )(\W)", "0")

这不像我希望的那样工作。所以我的问题是:
是否可以仅用一个 Regex.Replace 调用来替换特定字符串中的所有非单词字符?怎么样?

【问题讨论】:

    标签: vb.net regex replace


    【解决方案1】:

    试试这个:

    Regex.Replace(fileContentString, "(?<=SendersTimeSeriesIdentification:\s.*)[_\W]", "0")
    

    这会将“SendersTimeSeriesIdentification:”之后的所有 \W 和 _ 字符替换为“0”。

    【讨论】:

    • 我会使用这个解决方案,只是因为它在我的情况下更容易。我想如果该行末尾有注释(//一些注释),这将不起作用,因为两个正斜杠将被替换,即使它们不应该有。
    【解决方案2】:

    我将文件分成几行,然后只处理以“SendersTimeSeriesIdentification:”开头的行,而不是作为单个正则表达式替换。 这样,正则表达式替换既好又简单。

    【讨论】:

    • Kamarey 的回答是正确的,但如果可以的话,我会采用这种方法。
    • @Alan M:我同意。 “如果我能”是这里的关键。 :-)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-12-19
    • 2018-02-09
    • 1970-01-01
    • 2021-11-20
    • 2017-06-23
    • 1970-01-01
    • 2012-12-04
    相关资源
    最近更新 更多