How to automatically add space on both sides of the operator
-
The workaround I ve suggested at the last post doesn t work in such cases
ab=ab+1;
But even so, I believe “find and replace” with a better regEx you will find out a solution.
-
Hello, @成轩 and All
Without additional information, it’s quite hard to plan anything ! Which language are you using ?
Anyway, I tried to find out a correct regex S/R, which :
-
Trims any trailing horizontal blank characters, before the End of Line
-
Keeps any leading indentation
-
Keeps the blank characters in any range
".........."
, too -
Deletes any range of horizontal blank characters, before a comma
-
Normalizes to a single space character, any range of blank characters, even none, PRECEDING, either :
-
Any consecutive range of symbols
! " # $ % & ' * + - / : ; = ? @ \ ^ | ~
-
Any single symbol
[ ] ( ) < > { }
-
Any consecutive range of word characters or dot
Letter Digit _ .
-
Of course, there are still few weird results ! For instance, the sentence “On the 10/27 of that year” would become “On the 10 / 27 of that year” but that other sentence “The value x=a*10/27+b” would produce the sentence “The value x = a * 10 / 27 + b” which is quite correct !
For example, the statement “x=(((a+5)/(z-7/b)-sin(30))*Log(6))” would be developed as “x = ( ( ( a + 5 ) / ( z - 7 / b ) - sin ( 30 ) ) * Log ( 6 ) )” with, certainly, too many space characters than necessary ;-))
A last example : here is, below, a simple Python script, regarding Unix Timestamp, with a very, very bad presentation ! You may select the option View > Show Symbol > Show All Characters to visualize all the blank characters
Day = 28 Month=3 Year = 2018 Hours =15 Minutes=19 Seconds =0 # This small script get any Unix Timestamp # with the different time variables above # defined with a correct numeric value Leap=int(Year %4==0)-int( Year%100==0)+int(Year%400==0) # = 1 if a is a LEAP year, = 0 if NOT Leap_Years=(Year -1)//4-(Year-1) //100+(Year-1)//400-477 # = TOTAL of LEAP years, from 1970 to the year (Year-1) Calendar_Day = round(30.57*(Month-1)-2*int(Month > 2))+Day+int(Leap==1) * int(Month>2) # = TOTAL of days, from the 01/01 of Year, to Day, included Total_Days=(Year-1970)*365+Leap_Years+Calendar_Day-1 # = TOTAL of days, from 01/01/1970, till (Day-1) of Year Unix_Time=Total_Days*86400+3600*Hours + 60*Minutes+Seconds # UNIX time, in seconds print("And, here are.... the results : ",Leap ,Leap_Years, Calendar_Day,Total_Days,Unix_Time, "< Good Bye >") # The results are : # Leap=0 # Leap_Year = 12 # Calendar_Day = 87 # Total_Days = 17618 # Unix_Time = 1522250340
-
Open the Replace dialog (
Ctrl + H
) -
In the Find what: zone, type in the regex :
(?-s)(\h+\R)|(\h*,)|(^)?\h*(".*?"|[]()<>{}[]|[!"#$%&'*+/:;=?@\\^`|~-]+|[\w.]+)
- In the Replace with: zone, type in the regex
(?1\r\n:(?2,:(?3$0:\x20\4)))
-
Tick the
Wrap around
option -
Click, once, on the
Replace All
button ( or several times on theReplace
button
Et voilà ! You should get the following new text :
Day = 28 Month = 3 Year = 2018 Hours = 15 Minutes = 19 Seconds = 0 # This small script get any Unix Timestamp # with the different time variables above # defined with a correct numeric value Leap = int ( Year % 4 == 0 ) - int ( Year % 100 == 0 ) + int ( Year % 400 == 0 ) # = 1 if a is a LEAP year, = 0 if NOT Leap_Years = ( Year - 1 ) // 4 - ( Year - 1 ) // 100 + ( Year - 1 ) // 400 - 477 # = TOTAL of LEAP years, from 1970 to the year ( Year - 1 ) Calendar_Day = round ( 30.57 * ( Month - 1 ) - 2 * int ( Month > 2 ) ) + Day + int ( Leap == 1 ) * int ( Month > 2 ) # = TOTAL of days, from the 01 / 01 of Year, to Day, included Total_Days = ( Year - 1970 ) * 365 + Leap_Years + Calendar_Day - 1 # = TOTAL of days, from 01 / 01 / 1970, till ( Day - 1 ) of Year Unix_Time = Total_Days * 86400 + 3600 * Hours + 60 * Minutes + Seconds # UNIX time, in seconds print ( "And, here are.... the results : ", Leap, Leap_Years, Calendar_Day, Total_Days, Unix_Time, "< Good Bye >" ) # The results are : # Leap = 0 # Leap_Year = 12 # Calendar_Day = 87 # Total_Days = 17618 # Unix_Time = 1522250340
Of course, the trailing comments and, generally, the possible lists are not aligned, too :-( Anyway, I just ran that Python3 script, after the S/R modifications, without any trouble !
You may use this Unix Timestamp Converter to verify my calculus !
Cheers,
guy038
P.S. :
-
This Python example is quite raw and simple ! My initial program, about conversions Date <–> Unix Timestamp, was written in the old Qbasic language and some months ago, I simply translated the main part, as an Python3 exercise , about mathematics ;-))
-
About 00h30, in France ! So, I’m a bit lazy to explain how this regex S/R works ! May be next time, if you offer me… some beer ;-))
-
-
@成轩 : Spend less than ten seconds to write your own Macro !
-
@Gogo-Neatza said:
Spend less than ten seconds to write your own Macro !
I’m not sure how THAT is helpful in any way…please explain if you can…
@guy038 said:
…the statement “x=(((a+5)/(z-7/b)-sin(30))*Log(6))” would be … “x = ( ( ( a + 5 ) / ( z - 7 / b ) - sin ( 30 ) ) * Log ( 6 ) )” with…too many space characters
It is very subjective (i.e., everybody likes it their own way), but I definitely agree that this is too spacey:
x = ( ( ( a + 5 ) / ( z - 7 / b ) - sin ( 30 ) ) * Log ( 6 ) )
but I like this version, which doesn’t add space adjacent to
(
or)
:x = (((a + 5) / (z - 7 / b) - sin(30)) * Log(6))
The original is just visually painful …ouch! :
x=(((a+5)/(z-7/b)-sin(30))*Log(6))
I think I will make the modification to the regex to avoid the “too spacey” condition and then record it as a Replace All, In Selection macro, for handy use when I get a short snippet of code from (e.g.) stackoverflow and don’t like the original whitespacing of an equation. (Is this what @Gogo-Neatza meant?!)
BTW, @guy038, I like this site for timestamp conversion.
-
Hi, in order to convert the following sample of code:
x=(((a+5)/(z-7/b)-sin(30))*Log(6))
to this one: (without double spacing)
x = ( ( ( a + 5 ) / ( z - 7 / b ) - sin ( 30 ) ) * Log ( 6 ) )
find:
(([\w])([^\w|\s]))|(([^\w|\s])([\w]))|(([^\w|\s])([^\w|\s]))
replace:
(?1\2 \3)(?4\5 \6)(?7\8 \9)
-
I just forgot to mention that the above find and replace must apply 2 times (for the given sample code).
-
Hmmm…or just put the spaces in by this process:
- position the caret appropriately
- press the space bar once
- REPEAT above steps until desired effect is achieved
-
Maybe this issue would be a case to new feature request (or plugin suggestion) in a way to put spaces between chars of current line, and the user lists in a field the sequences that wouldn’t applied (ex. ++, —,…). There would be a general sequence list and others to each language.
-
I also hope that such a plugin can be selected for different languages. I hope it can automatically determine the operator I entered and then automatically add spaces. Although regular expression processing can achieve the above operations, I think it is not too friendly and convenient
-
Thank you all for answering questions
-
You could try to use “find and replace” feature, set to consider regular expressions, and replace all no-space (x) char with x followed a space in a current selection.
Save it as a macro and apply in other parts of code.
https://10bestgame.com/instagram-cool-captions/