0
votes

C # Remplacer le texte entre guillemets

Ceci est mon premier message dans ce forum. J'ai un texte avec en double que je veux remplacer par un autre texte.

Ceci est mon texte intégral

"Mesures opérationnelles ~ Coûts décaissés du cuivre C1 ($ US / lb) - Lalor ~ 9999" * "Mesures opérationnelles ~ Dollars canadiens ($ canadiens / $ US) ~ 9999"

Ce texte «Métriques opérationnelles ~ Coûts décaissés du cuivre C1 (US $ / lb) - Lalor ~ 9999» sera remplacé par l'adresse de cellule Excel A10 .

J'ai essayé de cette façon, mais je n'ai pas pu remplacer le texte entre guillemets. il y a sûrement un problème dans mon code que je ne suis pas en mesure de résoudre.

public static string ReplaceWholeWord(this string original, string wordToFind, string replacement, RegexOptions regexOptions = RegexOptions.None)
        {
            string pattern = String.Format(@"\b{0}\b", wordToFind);
            string ret = Regex.Replace(original, pattern, replacement, regexOptions);
            return ret;
        }

La sortie souhaitée sera.

"A10"*"Operational Metrics~Canadian Dollars (Canadian $/US$)"

J'ai essayé cette logique aussi mais toujours pas de chance.

string mainstr = "\"" + "Operational Metrics~Copper C1 Cash Costs (US$/lb) - Lalor~9999" + "\"" + "*" + "\"" + "Operational Metrics~Canadian Dollars (Canadian $/US$)~9999" + "\"";
string replacesfrom = "\"" + "Operational Metrics~Copper C1 Cash Costs (US$/lb) - Lalor~9999" + "\"";
string replacesto = "A10";
string afterreplace = Regex.Replace(mainstr, replacesfrom, replacesto);

avec la fonction ci-dessus, j'essaie de remplacer mais malheureusement pas en mesure de remplacer le texte Métriques opérationnelles ~ Coûts en espèces du cuivre C1 (US $ / lb) - Lalor avec A10

Veuillez suggérer quoi changer dans mon code ci-dessus.

c#

1 commentaires

Vous n'avez pas besoin de Regex ici car vous remplacez simplement une sous-chaîne statique; string.Replace devrait suffire. Si vous devez utiliser Regex, vous devez être conscient que les parenthèses et les caractères dollar et barre oblique ont une signification particulière et doivent être échappés.


3 Réponses :


0
votes

tout d'abord, vous n'avez pas besoin du "+" dans vos chaînes par exemple:

string afterreplace = mainstr.Replace(replacesfrom, replacesto)

pourrait être:

string replacesfrom = "\"Operational Metrics~Copper C1 Cash Costs (US$/lb) - Lalor\"";

Et ce que j'ai pu comprendre, c'est ce dont vous avez besoin, à remplacer:

string replacesfrom = "\"" + "Operational Metrics~Copper C1 Cash Costs (US$/lb) - Lalor" + "\"";

Et pour obtenir l'adresse de la cellule, si vous ne savez pas comment, cela devrait fonctionner: Comment puis-je obtenir l'adresse de la cellule d'Excel


0 commentaires

1
votes

Regex.Replace fonctionne différemment de String.Replace. Utilisation

string afterreplace = mainstr.Replace(replacesfrom, replacesto);


2 commentaires

+1, mieux que ma réponse qui utilise inutilement Regex ... aussi, voici un lien vers un dotnetfiddle montrant que cela fonctionne


Le remplacement peut créer un problème. j'ai besoin de remplacer le texte par un guillemet double. supposons qu'il puisse y avoir du texte comme "Z1" + "Z12" remplacer remplacera Z1 par A10. alors la sortie serait "A10" + "A102" c'est pourquoi je n'utilise pas la fonction de remplacement. J'ai besoin de trouver du texte avec en guillemet double remplacer. la fonction de remplacement peut ne pas fonctionner un certain temps et créer un problème.



0
votes

Si vous voulez désespérément utiliser Regex, continuez à lire. Sinon, voir la réponse de Yaroslav


Le problème est que vous n'avez pas échappé aux caractères spéciaux Regex, c'est-à-dire ( , ) , $ et /

Votre expression régulière actuelle est des Operational Metrics~Copper C1 Cash Costs (US$/lb) - Lalor~9999 contient des caractères spéciaux ( Regexr les explique mieux ), essentiellement ( et ) désignent un groupe de capture et $ désigne la fin de votre chaîne. Cela signifie que nous devrons leur échapper avec un \ . Cela signifie que votre Regex ( replacesfrom ) est maintenant

@"""Operational Metrics~Copper C1 Cash Costs \(US\$\/lb\) - Lalor~9999"""

Voici un dotnetfiddle montrant que cela fonctionne


5 commentaires

merci pour votre violon. comment puis-je échapper à tous les caractères spéciaux de la manière dont vous codez en dur dans un texte qui est une string replacesfrom = @"""Operational Metrics~Copper C1 Cash Costs \(US\$\/lb\) - Lalor~9999""";


$ devrait être remplacé par \ $ \? le support doit être remplacé par (&)?


Non. Echapper dans une expression régulière se fait de la même manière que s'échapper dans une chaîne normale, juste un simple \` followed by the character you want to escape. IE \ "` échappe un " intérieur d'une chaîne, et \$ échappe le $ à l'intérieur du Regex. J'ai juste utilisé la chaîne verbatim ( @"..." ) pour ne pas avoir à échapper au caractère d'échappement (\). J'ai échappé aux caractères ( , $ , / et ) séparément


Comment pourrais-je avoir une routine générique que j'appellerai pour remplacer tous les caractères spéciaux. Veuillez suggérer un exemple de code ou tout lien qui me guide pour remplacer les caractères spéciaux. Merci


Une recherche rapide sur Google m'a donné Regex.Escape