11744

Find and replace a specific reference pattern by a regular expression (no.2)

Question:

Today, I was very happy that I get a solution for my first post here: <a href="https://stackoverflow.com/questions/29717966/find-and-replace-a-specific-reference-pattern-by-a-regular-expression/29718167?noredirect=1#comment47595785_29718167" rel="nofollow">Find and replace a specific reference pattern by a regular expression</a>.

I'd like to replace following entries (and many more of these types in my document), so that the (number 1,2,3,4 or 5, only if present, plus) the first three alpha-letters is written in the bracket after textit. The initial expression has to be appended.

Input:

\nobreakword{(vgl. 1. Johannes 4,16)} \nobreakword{(vgl. Daniel 4,15.17.32f.)} \nobreakword{(vgl. 2. Könige 7,7)}

=> Output:

\index[bibel]{@1. Johannes!\textit{1Joh 4,16}}\nobreakword{(vgl. 1. Johannes 4,16)} \index[bibel]{@Daniel!\textit{Dan 4,15.17.32f.}}\nobreakword{(vgl. Daniel 4,15.17.32f.)} \index[bibel]{@2. Könige!\textit{2Könige 7,7}}\nobreakword{(vgl. 2. Könige 7,7)}

I have also ä/ö/ü characters inside the brackets.

I'd like to include patterns in which the numerical part is written on the next line (because of copy paste) there is an ENTER (space/many blank characters) between the text and numbers.

\nobreakword{(vgl. 1. Korinther 13,4-7.8-12)} => \index[bibel]{@1. Korinther!\textit{1Kor 13,4-7.8-12}}\nobreakword{(vgl. 1. Korinther 13,4-7.8-12)} \nobreakword{(vgl. 1. Korinther 13,4-7.8-12)} => \index[bibel]{@1. Korinther!\textit{1Kor 13,4-7.8-12}}\nobreakword{(vgl. 1. Korinther 13,4-7.8-12)} \nobreakword{(vgl. 1. Korinther 13,4-7.8-12)} => \index[bibel]{@1. Korinther!\textit{1Kor 13,4-7.8-12}}\nobreakword{(vgl. 1. Korinther 13,4-7.8-12)}

I have other text which should not be changed:

\index[stichwort]{Begriffe!Zeichen} => \index[stichwort]{Begriffe!Zeichen} \index[stichwort]{Bilder [wörtl./bildhaft:Gleichnis,Symbol/beides]!Personen!Abraham} => \index[stichwort]{Bilder [wörtl./bildhaft:Gleichnis,Symbol/beides]!Personen!Abraham}

If possible I'd like again to use <a href="https://regex101.com" rel="nofollow noreferrer">https://regex101.com</a>

I tried (without success): \\nobreakword{(vgl. (\d+)(?:\.\s+))?(.{3})[\s\S]*?([a-z0-9.,-]+)}

Is it possible to use a single search pattern + single replace pattern with regular expression to replace all of the examples in one step?

<strong>EDIT</strong>

All names "Johannes", "Daniel", "Könige", "Korinther" etc. are at least 3 characters long.

I like to input following test string:

\chapter{Gottes Liebesbeweis an uns Menschen} \begin{flushright}\footnotesize\textit{ursprünglicher Beitrag vom 29. April 2014 überarbeitet}\end{flushright} - Gott ist Liebe. \nobreakword{(vgl. 1. Johannes 4,16)}\\ - Jesus Christus ist der Erstgeborene der gesamten Schöpfung. (vgl. Kolosser 1,15-17) \index[bibel]{51@Kolosser!\textit{Kol 1,15-17}} \index[stichwort]{Bilder [wörtl./bildhaft:Gleichnis,Symbol/beides]!Erstgeburt/Erstgeborener}\\ - Im Anfang, nachdem Jesus war, schuf Gott Himmel und Erde. (vgl. 1. Mose 1,1)\index[stichwort]{Bilder [wörtl./bildhaft:Gleichnis,Symbol/beides]!Himmel}\\ - Liebe braucht ein Gegenüber: Gott hat den Menschen geschaffen nach dem Bild von Gott, der fähig war, Liebe zu empfinden und zurückzulieben. \nobreakword{(vgl. 1. Mose 1,26)}\\ - Echte Liebe kann nur bedingungslos sein und muss dem Gegenüber erlauben, sich gegen die Liebe zu entscheiden. \nobreakword{(vgl. 1. Korinther 13,4-7)}\\ - Gott erwählte Jesus bereits vor Erschaffung des Menschen, weil ER bereits zu Anbeginn der Zeit wusste, dass alle Menschen Unrecht tun werden und Rettung benötigen. \nobreakword{(vgl. Epheser 1,3-4)} \index[stichwort]{Begriffe!Gerechtigkeit/Gerechtsprechung/Gerechte/ \newline Rechtfertigung}\\ - Gott kann alles tun, was ER tun möchte \nobreakword{(vgl. Daniel 4,32)}\\ - Gott erlaubt jedem seiner Geschöpfe die Entscheidung, ob es mit IHM - genauer: in IHM - leben möchte oder nicht: Ein Engel Gottes in niedriger Stellung in einem der Himmel wollte sich dem Allerhöchsten gleich machen in dem dieser Engel zum einen Himmel emporsteigt und ist bei diesem Vorgehen hinabgestürzt. \nobreakword{(vgl. Jesaja 14,12-14)}\\ - Liebe ist bereit ein Risiko einzugehen: Gott überlässt seinen Geschöpfe gewisse Entscheidungen. \nobreakword{(vgl. 1. Mose 2,16-17)}\\ - Der gefallene Engel hatte die Macht Adam und Eva zu versuchen. (vgl. 1. Mose 3,1)\index[stichwort]{Bilder [wörtl./bildhaft:Gleichnis,Symbol/beides]!Personen!Adam}\\ - Adam und Eva wollten sein wie Gott, sie wollten dieselbe Erkenntnis haben wie Gott. \nobreakword{(vgl. 1.Mose 3,5)}\\ - Gottes Gedanken, Wege, Weisheit und Erkenntnis sind unbeschreibbar viel grösser als die unseren. \nobreakword{(vgl. Römer 11,33)}\index[stichwort]{Bilder [wörtl./bildhaft:Gleichnis,Symbol/beides]!Weg}\\ - Gott lässt sich nicht über eine bestimmte Anzahl von Bildern definieren; Gott spricht: "Ich bin, der ich bin". \nobreakword{(vgl. 2. Mose 3,14)}\\ - Wir haben uns vor Gott getrennt, weil wir selbst unabhängig sein wollten, anstatt IHM ganz zu vertrauen und gehorchen. \nobreakword{(vgl. Römer 3,12)}\\ - Als Folge des Sündenfalls im Garten Eden kam der Tod. \nobreakword{(vgl. Römer 6,23)}\\ - Die Schöpfungsordnung, dass der Mensch und die Tiere sich von Pflanzen ernähren sollte wurde zerstört. \nobreakword{(vgl. 1. Mose 1,29-30)}\\ - Adam und Eva wurden durch den Ungehorsam Gott gegenüber der Sünde Sklave der Sünde. \nobreakword{(vgl. Johannes 8,34)}\\ - Die Bosheit der Nachkommen Adam und Eva nahm immer weiter zu, dass sich nach meiner Auslegung gefallene Engel Gottes mehreren Frauen paarten und ihnen Riesen gebaren, wonach auch Gottes Gericht - die Sintflut - kam. \nobreakword{(vgl. 1. Mose 6, 1-7)} \index[stichwort]{Begriffe!Zorn/Gericht/Vergeltung/Hölle/Tod}\index[stichwort]{Bilder [wörtl./bildhaft:Gleichnis,Symbol/beides]!Sintflut}\\ - Alle Menschen sind schuldig geworden, und werden durch den Glauben an IHN ohne Verdienst gerecht gesprochen. \nobreakword{(vgl. Römer 3,23-28)} \index[stichwort]{Begriffe!Gerechtigkeit/Gerechtsprechung/Gerechte/ \newline Rechtfertigung}\\ - Jeder Mensch kommt schuldig zur Welt. \nobreakword{\nobreakword{(vgl. Psalm 51,7)}}\\ - Ein Gläubiger darf bei verstorbenen Säuglingen die Hoffnung haben nach dem irdischen Leben wieder bei diesem Menschen zu sein, selbst wenn der Säugling zu Lebzeiten nicht die Möglichkeit hatte sich für oder gegen Gott zu entscheiden. \nobreakword{(vgl. 2. Samuel 12,21-23)}\\ - Gott ist vollkommen gerecht. \nobreakword{(vgl. 5. Mose 32,4)}\index[stichwort]{Begriffe!Gerechtigkeit/Gerechtsprechung/Gerechte/ \newline Rechtfertigung}\\ - Gott kann keine Gemeinschaft mit Sündern haben, sodass es zwischen IHM und den Menschen eine Trennung geben musste. \nobreakword{\nobreakword{(vgl. Jesaja 59,2)}}\\ - Gott möchte eine persönliche Beziehung zu uns Menschen haben. \nobreakword{(vgl. Johannes 17,3)}\\

Answer1:

The regex:

\\nobreakword\{\(vgl\.\s+(([0-9]*)\.\s+)?((\S\S\S)\S*)\s+([^)]*)\)\}

And the replacement:

\\index[bibel]{@\1 \3!\\textit{\2\4 \5}}\0

<a href="https://regex101.com/r/gI4vO7/1" rel="nofollow">On regex101 here.</a>

In general, though, this is a terrible way of fixing your references in Latex. You should instead define functions which produce the correct output, so you have a centralized place to edit the formatting when your requirements change.

Answer2:

Your approach was correct.. except for few modifications. You can use :

(\\nobreakword{\(vgl\.\s*((\d+)(?:\.\s+))?((.{3}).+?\b)[\s\S]*?([a-z0-9.,-]+)\)})

and replace with \\index[bibel]{@$2$4!\\textit{$3$5 $6}}$1

See <a href="https://regex101.com/r/vK3jA4/3" rel="nofollow">DEMO</a>

Recommend

  • warning: passing argument 1 of 'numberWithBool:' with different width due to prototype
  • ASN.1 Decode Error
  • android - Inserting, Updating, Deleting SMS using ContentResolver
  • Capifony fails deploying
  • Javascript, uploading several files within an Array.reduce with Promises, how?
  • tomcat resteasy singleton
  • Building HighCharts-Export Server 2.1 Fails
  • How to exclude jars from ear
  • Jboss doesn't deploy war, JBAS011006
  • Compile all .rb files of a Ruby on Rails app to .class using JRuby, pack it into a .war and deploy i
  • Debug information file conventions for Red Hat/Fedora?
  • Android history stack clear without one
  • Want to add a timer to GlassFish Server, don't know where to start
  • Dockerizing Spring boot application for Kubernetes Deployment
  • Grails 3.x update - bootRun failed
  • How do I import Python node dicts into neo4j?
  • Parsing a JSON string in node js?
  • Grails 3 session timeout not working when deployed to Tomcat
  • How java/maven resolves dependency conflicts at run time
  • Flash Fallback Not Working with IE7 on Windows XP SP2
  • war file generated by Grails ignores dataSource URL
  • Eclipse Neon + Maven = The chosen operation is not available
  • Jetty IncompatibleClassChangeError: Implementing class
  • How to deploy war with embedded jetty server
  • Eclipse including Java source code files with class files in WAR
  • ComboBox's SelectedItem is unexpectedly set to null before actual value
  • Changing app.servlet.version does not affect web.xml
  • Grails 2 app wont deploy on JBOSS: BeanCreationException
  • Java EE: Proxy cannot be cast to Local Interface, maybe classloading issue?
  • How to get the right image data in base64 format using HTML5 canvas
  • How to Get Maven Project Version From Java Method as Like at Pom
  • How to use Linq-to-SQL without having to generate all the classes?
  • Deploying a sample Spring Web MVC project
  • Can NSRange determine if a snippet of text exists in a larger string?
  • Restore session after restart in JBoss
  • What is an Artifact?
  • How to modify search result page given by Solr?
  • Can XOR be expressed using SKI combinators?
  • “mvn clean generate-source” could not resolve dependencies
  • How to programatically 'login' a user based on 'remember me' cookie when using j