我不是程序员,所以如果我的问题有点过于基本,我会道歉。
我是一名翻译,并且有一个xliff(为了我们的目的,纯文本)文档大致结构如下:
<source>For workers in the rest of the state, the minimum wage will increase to $9.70 at the end of 2016, then another .70 each year after until reaching $12.50 on 12/31/2020 – after which the minimum wage will continue to increase to $15 on an indexed schedule.</source>
<target>Для работников остальной части штата минимальная ставка оплаты труда поднимется до $9,70 в конце 2016 года, а затем будет расти на $0,70 ежегодно, достигнув размера в $12,50 31 декабря 2020 года, после чего минимальная ставка будет продолжать повышаться до $15 на основании графика.</target>
我正在尝试捕获<target>
段中所有美元金额的实例,因此美元符号后面跟着一个或两个数字,后面跟一个逗号和两个以上的数字。
目的是最终在Notepad ++中使用regex find和replace替换这些表达式。
到目前为止,我已经测试了以下表达式(考虑到逗号的逗留时间代替逗号)
(\$\d+(\,|\.)?\d*\d*)
并返回所有美元金额,包括<source>
段中的金额。根据我在这里的搜索,我尝试使用lookbehinds排除这些,但未能获得所需的结果。我不会与你分享失败的尝试。
实现这一目标的好方法是什么?
谢谢!
答案 0 :(得分:0)
好的,这很棘手。您可以很容易地将文字中的美元金额与此匹配:
(\$\d+(?:(?:\.|,)\d{2})?)
但如果您只想在某一点之后进行匹配,则可以匹配之前的内容,然后使用\K
将其丢弃。因此,这将匹配所有source
内容和开始target
标记:
<source>.*?</source>\s*<target>\K
然后,由于我们在\K
上进行操作,它将从那里开始匹配。现在,通过在我们的美元符号捕获组之前添加.*?
,我们将能够捕获第一组内容。但是,如果要捕获多个内容,则需要递归第一个模式。您可以使用(?1)
语法执行此操作。这将重复第一个捕获组。
如果你把它们放在一起,你最终会得到这样的东西:
<source>.*?</source>\s*<target>\K(?:.*?)(\$\d+(?:(?:\.|,)\d{2})?)|((?1))
希望这会让你朝着正确的方向前进。