С другой стороны, что-то не использующее регулярные выражения вообще:
prefix, data = var[:3], var[3:]
if prefix == 'foo':
# do something with data
elif prefix == 'bar':
# do something with data
elif prefix == 'baz':
# do something with data
else:
# do something with var
, Подходит ли это, зависит от Вашей фактической проблемы. Не забывайте, регулярные выражения не являются швейцарским ножом, что они находятся в Perl; Python имеет различные конструкции для того, чтобы сделать обработку строк.
Это Символ замены Unicode, \ uFFFD. ( info )
Должно получиться что-то вроде этого:
String strImport = "For some reason my �double quotes� were lost.";
strImport = strImport.replaceAll("\uFFFD", "\"");
Character issues like this are difficult to diagnose because information is easily lost through misinterpretation of characters via application bugs, misconfiguration, cut'n'paste, etc.
As I (and apparently others) see it, you've pasted three characters:
codepoint glyph escaped windows-1252 info
=======================================================================
U+00ef ï \u00ef ef, LATIN_1_SUPPLEMENT, LOWERCASE_LETTER
U+00bf ¿ \u00bf bf, LATIN_1_SUPPLEMENT, OTHER_PUNCTUATION
U+00bd ½ \u00bd bd, LATIN_1_SUPPLEMENT, OTHER_NUMBER
To identify the character, download and run the program from this page. Paste your character into the text field and select the glyph mode; paste the report into your question. It'll help people identify the problematic character.
Вы просите заменить символ « », но для меня это три символа «ï», «¿» и «½». Это может быть вашей проблемой ... Если вы используете Java до Java 1.5, вы получаете только символы UCS-2, то есть только первые 65K символов UTF-8. Основываясь на других комментариях, наиболее вероятно, что искомый символ - это « », то есть символ замены Unicode. Это символ, который «используется для замены входящего символа, значение которого неизвестно или непредставимо в Unicode».
На самом деле, глядя на комментарий Кэти, другая проблема, с которой вы можете столкнуться, заключается в том, что javac не интерпретирует ваш .java файл как UTF-8, предполагая, что вы пишете его в UTF-8. Попробуйте использовать:
javac -encoding UTF-8 xx.java
Или измените исходный код следующим образом:
String.replaceAll("\uFFFD", "");
Как уже говорили другие, вы отправили 3 символа вместо одного. Я предлагаю вам запустить этот небольшой фрагмент кода, чтобы увидеть, что на самом деле в вашей строке:
public static void dumpString(String text)
{
for (int i=0; i < text.length(); i++)
{
System.out.println("U+" + Integer.toString(text.charAt(i), 16)
+ " " + text.charAt(i));
}
}
Если вы опубликуете результаты, вам будет легче понять, что происходит. (Я не удосужился заполнить строку - мы можем сделать это путем проверки ...)
Используйте escape-последовательность Unicode . Сначала вам нужно найти код символа, который вы хотите заменить (скажем, это ABCD в шестнадцатеричном формате):
str = str.replaceAll("\uABCD", "");