0

以下是string我处理文档文件后得到的......

$$JHFIRMPHONE-91$$
$$SYSDATE-4$$
Dear  $$RCSALUTATION-5$$,
$$PAPTRANSMITTHANKS-34$$$$IPOWERPACKAGE-56$$$$CASHCARDLOADED-57$$$$CASHCARDTYPE-58$$$$ACTIVATE-59$$$$REFUNDBALANCEDUE-63$$$$FLEXPAY-68$$$$FLEXPAYCONT-67$$
$$REFBALDU$$$$EEXT-73$$
$$RALCASHCARD-64$$
$$ACRCASHCARD-65$$
$$CHECKMONEYCREDITCARD-61$$
$$NOPAYFULL-62$$
$$RAFMEMO-38$$$$RAFMEMOPT2-44$$
$$AMENDED-24$$
$$FORMSSCHEDULES-11$$
$$FORMS_LIST$$
$$FDHANDWRITTENATTACHMENTS-35$$
$$FDATTACHMENTS-26$$
$$FURNISHEDCOPIESKEEP-69$$
$$ESORDEATH-36$$
$$GOLDGUARANTEE-20$$
$$BASICGUARANTEE1-76$$$$BASICGUARANTEE2-77$$$$BASICGUARANTEE3-78$$
$$STONLYOPC-37$$
$$STATE-14$$
$$ST_DATA$$
$$STHANDWRITTENATTACHMENTS-29$$
$$STATTACHMENTS-27$$
$$TAXCOURSE-72$$
$$REWARDTYPE-82$$$$REWARDTYPE2-83$$$$REWARDTYPE3-84$$$$HEALTHBENEFITS-92$$$$HEALTHBENEFITS2-93$$$$HEALTHBENEFITS3-94$$$$HEALTHBENEFITS4-95$$$$HEALTHBENEFITS5-96$$
$$SINCERELY-40$$
$$CLOSING-16$$
$$JHTAXSERVICE-17$$
$$RAFSTARMEMO-45$$
$$RAFSTARMEMO2-97$$

我想要的是,我需要text values介于两者之间$$$$我不知道如何以有效的方式做到这一点......我想要一些Regular Expression解决方案来解决这个问题。我对此知之甚少Regular Expression,所以请大家帮忙我在这...除了正则表达式之外的任何有效解决方案也可以...提前谢谢...

4

3 回答 3

4

这里有一些正则表达式基础知识,值得一读。

就您的具体问题而言:

foreach(Match match in Regex.Matches(input, @"\$\$(.*?)\$\$"))
{
    string textValue = match.Groups[1].Value;
    // process the text value
}

正则表达式匹配,两个字面值$,然后是任意多个非换行符(仅在必要时)以获得另外两个$. 由于匹配不能重叠,因此从结尾$$到开头没有额外匹配的危险$$

一个更有效且通常推荐的正则表达式是:

@"\$\$((?!\$\$).)*\$\$"

它基本上做同样的事情,只是正则表达式内部有点不同(看看“前瞻”)。

事实上,如果你能保证文本值总是只包含字母、数字、下划线和连字符,你可以使用:

@"\$\$([\w-]+)\$\$"

并不是说对于所有这三种情况,有些人更喜欢用 替换\$\$\${2}但我个人觉得两次重复有点不必要。

于 2012-11-02T14:28:23.407 回答
1

我认为\$\$([A-Z0-9\_\-]+?)\$\$应该覆盖负载。

您可能想要检查它允许多行解析的额外参数。

查看此链接以获取有关正则表达式的更多详细信息

于 2012-11-02T14:28:27.537 回答
1

实际上不需要正则表达式。您的文本很容易被String.Split.

var parts = str.Split(new string[] {"$$"}, StringSplitOptions.RemoveEmptyEntries);
于 2012-11-02T14:37:26.047 回答