我试图修复一个文件全1位和2位数字,使他们所有2位数字长。
文件的格式为:
10,5,2
2,4,5
7,7,12
...
我已经成功地与匹配的问题数:
(^|,)(\d)(,|$)
所有我想现在要做的就是用替换字符串违规:
${1}0$2$3
但TextMate给我:
10${1}05,2
任何想法?
由于提前, 罗斯
我试图修复一个文件全1位和2位数字,使他们所有2位数字长。
文件的格式为:
10,5,2
2,4,5
7,7,12
...
我已经成功地与匹配的问题数:
(^|,)(\d)(,|$)
所有我想现在要做的就是用替换字符串违规:
${1}0$2$3
但TextMate给我:
10${1}05,2
任何想法?
由于提前, 罗斯
根据this,TextMate支持字边界定位符,因此您还可以搜索\b\d\b
并全部替换为0$0
。 (感谢Peter Boughton的建议!)
这样做的好处是一次性捕获所有数字 - 您的解决方案必须至少应用两次,因为正则表达式引擎在下一个数字之前已经使用了逗号替换成功后。
你不必${1}
- 替换字符串支持最高仅达9组 - 这样就不会误认为是$10
。
替换$10$2$3
+1,同样:) – 2010-06-21 11:45:46
当我尝试这一点,我发现,$ 10,替换为空,所以: 25,9, 变为: 259, – 2010-06-21 13:40:59
@rossmcf这是更换的正常行为与正则表达式。我没有文本,但如果你是对的,那可能是一个错误。 – Amarghosh 2010-06-21 13:57:26
注: Tim的解决方案更简单,解决了这个问题,但我会在这里把这个留给参考,如果有人有类似但更复杂的问题,它使用lookarounds支持。
比你的表达更简单的办法是更换:
(?<!\d)\d(?!\d)
有了:
0$0
这就是 “全部替换单位数字0,那么本身”。
的正则表达式是:
负回顾后不找一个数字(?<!\d)
单个位数:\d
负向前查找到找不到一个数字(?!\d)
单,这是一个位置匹配(不是一个字符匹配),它迎合逗号和开始/结束位置。
$0
部分表示“完整匹配” - 由于lookbehind/ahead匹配位置,这将包含匹配的单个数字。
谢谢。必须玩后视/前进。我是一个正则表达式n00b。 – 2010-06-21 13:49:13
要有人来这里,因为@Amarghosh suggested,这是一个错误,或者故意行为导致的问题,如果没有别的。
我刚刚遇到了这个问题,不得不使用下面的解决方法:如果设置了另一个捕获组,然后使用条件插入,它将起作用。例如,我有一个像<WebObject name=Frage01
这样的字符串,并且想用02
替换01
,所以我捕获了主要字符串$1
和$2
中的最后一个数字,这给了我一个看起来像(<WebObject name=(Frage|Antwort))(01)
的正则表达式。
然后替换为$1(?2:02)
。
(?2:02)
是条件插入,在这种情况下总会找到一些东西,但为了解决在$n
末尾附加数字的奇怪难题,这是必要的。希望能帮助别人。有条件插入文档here
现在*有*一个不错的功能! – 2013-06-11 12:53:43
我能够使用您的解决方法在替换后放置一个数字。在我的情况下,我没有任何东西需要捕获才能用于条件插入,所以我只是在我知道不匹配任何字符的情况下做了一个捕获组,并且有条件地插入了任何内容:'^(。*)( π?)$'替换为$ 1(?2:)0' – 2015-09-25 17:16:45
在TextMate 1.5.11(1635)${1}
不起作用(如所述OP)。
我很欣赏很多关于重新改变查询字符串的建议,但是如果你想在一个捕获组和一个数字之间进行切换,有一个简单得多的解决方案:\u
。
这是一个TextMate特定的替换语法,它将下列字符转换为大写。由于没有大写的数字,它什么都不做,继续前进。它在the link from Tim Pietzcker's answer中描述。
在我的情况下,我不得不清理一个csv文件,其中箱的尺寸以厘米x厘米x毫米给出。因此,我不得不为前两个数字加零。
Text: "80 x 40 x 5 mm"
Desired text: "800 x 400 x 5 mm"
Find: (\d+) x (\d+) x (\d+)
Replace: $1\u0 x $2\u0 x $3 mm
对于超过10个捕获团体的支持,我不知道这是否是一个错误。但正如OP和@rossmcf所写,$10
被替换为null
。
+1为增值回答! – Amarghosh 2010-06-21 11:44:33
根据该链接,支持$ 0,因此您可以将正则表达式简化为'\ b \ d \ b',并在结果中使用0 $ 0。 – 2010-06-21 11:52:01
更好:)让我更正确地阅读它更彻底。编辑我的答案。 – 2010-06-21 12:06:48