Ищите регулярное выражение для работы со списком значений, разделенных запятыми

3953
user836026

У меня есть строка из 3 длинных чисел, разделенных запятой. Я хочу удалить номер посередине и оставить только первый номер и последний номер через запятую.

В настоящее время:

123456789123,723456789123456,834567885544334 123456789125,723456789123457,834567885544333 123456789126,723456789123458,834567885544337 

Желаемый результат:

123456789123,834567885544334 123456789125,834567885544333 123456789126,834567885544337 

Я пытался сделать это, но это не сработало с этими регулярными выражениями:

  • регулярное выражение для поиска строки: %[0-9]+,[0-9]+,[0-9]+
  • регулярное выражение для замены строки: ^1,^2

Какое регулярное выражение на самом деле делает то, что я хочу достичь?

Примечание. В настоящее время я использую приложение Ultraedit, которое работает в Windows 7. Если вы порекомендуете лучшее приложение для редактирования текста для Windows, которое может решить мою проблему, пожалуйста, дайте мне знать.

7
Я отредактировал ваш вопрос, если вы недовольны изменениями, не стесняйтесь отменить или отредактировать его снова. Baarn 12 лет назад 0

4 ответа на вопрос

10
Mechanical snail

You can simply replace the middle number of each line with nothing.

In the editor

That is, in your editor, search-and-replace the regex

,[0-9]+, 

(which only matches numbers with commas on both sides, which for your input is just the middle number) with a single comma:

, 

I assume Ultraedit supports regex search-and-replace. If not, try Notepad++, which I know does.

From the command line

Since you tagged your question , here's how to do it from the command-line.

sed

Use sed, a standard Linux command also available for Windows as part of Cygwin or GnuWin32:

C:\>sed -e 's/,[0-9]+,/,/g' filename.txt 

Powershell

Jens pointed out that you can also do it in Windows Powershell; see this explanation.

Это не будет работать, если вы замените среднее под-выражение пустой строкой. Вы можете, однако, заменить его одной запятой, чтобы получить желаемый эффект. Adeel Zafar Soomro 12 лет назад 1
Ой, это было глупо с моей стороны. Исправлена. Mechanical snail 12 лет назад 0
Без Cygwin вы могли бы использовать PowerShell: http://blogs.technet.com/b/heyscriptingguy/archive/2008/01/17/how-can-i-use-windows-powershell-to-replace-characters-in -a-текст-file.aspx Jens 12 лет назад 3
3
RedGrittyBrick

Regex syntax varies from application to application. I am unfamiliar with Ultredit and will give a generaql anser

Your regex lacks capturing parentheses

([0-9]+),[0-9]+,([0-9]+)

2
Adeel Zafar Soomro

In order to replace text, one needs to tag the proper sub-expression using parentheses.

In UltraEdit, you must search for the following regular expression:

 %^([0-9]+^),[0-9]+,^([0-9]+^) 
2
Brandon Kreisel

Awk Equivalent!

echo "$Variable" | awk 'FS="," { print $1","$3 } '