以下是处理Doc文件后得到的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
知之甚少,所以请大家帮帮我...除了正则表达式之外的任何有效解决方案也会...提前感谢...
答案 0 :(得分:4)
Here are some regex basics, worth reading up on.
就您的具体问题而言:
foreach(Match match in Regex.Matches(input, @"\$\$(.*?)\$\$"))
{
string textValue = match.Groups[1].Value;
// process the text value
}
正则表达式匹配,两个文字$
,然后任意多个非换行符(只有必要)才能再增加两个$
。由于匹配不能重叠,因此不存在从结尾$$
到结尾$$
获得额外匹配的危险。
效率稍高且通常推荐的正则表达式是:
@"\$\$((?!\$\$).)*\$\$"
它基本上做同样的事情,只是正则表达式内部有点不同(看看“前瞻”)。
事实上,如果您可以保证文本值始终只包含字母,数字,下划线和连字符,您可以使用:
@"\$\$([\w-]+)\$\$"
对于所有三种情况,并非如此,有些人更愿意将\$\$
替换为\${2}
,但我个人认为两次重复不需要这样做。
答案 1 :(得分:1)
答案 2 :(得分:1)
实际上不需要正则表达式。您的文字很容易按String.Split
分割。
var parts = str.Split(new string[] {"$$"}, StringSplitOptions.RemoveEmptyEntries);