Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. General and Desktop
  4. Can QChar functions work with QStrings ?
Forum Updated to NodeBB v4.3 + New Features

Can QChar functions work with QStrings ?

Scheduled Pinned Locked Moved Unsolved General and Desktop
25 Posts 6 Posters 3.2k Views 1 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • J Offline
    J Offline
    jefazo92
    wrote on last edited by
    #16

    Also does that mean that my line above would then not work as it should ?

    aha_1980A 1 Reply Last reply
    0
    • J jefazo92

      Also does that mean that my line above would then not work as it should ?

      aha_1980A Offline
      aha_1980A Offline
      aha_1980
      Lifetime Qt Champion
      wrote on last edited by
      #17

      @jefazo92

      Your code should work as well, I'd just clean it up a bit:

      for (int i = 0; i < aword.size(); i++) {
          if (!aword[i].isLetter())
            aword.remove(i--, 1);
      }
      

      However, why re-invent the wheel if there is a ready-made function?

      Qt has to stay free or it will die.

      1 Reply Last reply
      2
      • J Offline
        J Offline
        jefazo92
        wrote on last edited by jefazo92
        #18

        @aha_1980 said in Can QChar functions work with QStrings ?:

        QRegularExpression

        Hi @aha_1980,

        Thank you a lot for your reply. If it's not too much asking how did you find QRegularExpression ? Like I'm ctrl+F at the QStrings doc but I get 53 coincidences I don't know which of them all is the one that suits me for this example. I'm trying to understand what the [^\p{L}] in the QRegularExpression("[^\p{L}]") means. Also how did you know that the QChar functions I used for QString would work ? Since I'm still a rooky, all these details are important to help me fend off by myself in the future. Thanks.

        aha_1980A 1 Reply Last reply
        0
        • Christian EhrlicherC Offline
          Christian EhrlicherC Offline
          Christian Ehrlicher
          Lifetime Qt Champion
          wrote on last edited by
          #19

          You can find the documentation here: QRegularExpression

          Qt Online Installer direct download: https://download.qt.io/official_releases/online_installers/
          Visit the Qt Academy at https://academy.qt.io/catalog

          JonBJ 1 Reply Last reply
          3
          • Christian EhrlicherC Christian Ehrlicher

            You can find the documentation here: QRegularExpression

            JonBJ Online
            JonBJ Online
            JonB
            wrote on last edited by JonB
            #20

            @Christian-Ehrlicher
            To be fair to @jefazo92, that docs page does not begin to attempt to explain [^\p{L}], or even the \p{L}. In fact it only refers the reader to other sources, such as http://pcre.org/pcre.txt, for all syntax.

            I like reg exes, and have used them for years (decades), but it's only right to say to the OP that they are a bit tricky and he'll have to go outside Qt docs to find out about them. A resource I would recommend is an on-line constructor/tester like https://regex101.com/ or https://regexr.com/, though they are not very tutorially.

            1 Reply Last reply
            3
            • J jefazo92

              @aha_1980 said in Can QChar functions work with QStrings ?:

              QRegularExpression

              Hi @aha_1980,

              Thank you a lot for your reply. If it's not too much asking how did you find QRegularExpression ? Like I'm ctrl+F at the QStrings doc but I get 53 coincidences I don't know which of them all is the one that suits me for this example. I'm trying to understand what the [^\p{L}] in the QRegularExpression("[^\p{L}]") means. Also how did you know that the QChar functions I used for QString would work ? Since I'm still a rooky, all these details are important to help me fend off by myself in the future. Thanks.

              aha_1980A Offline
              aha_1980A Offline
              aha_1980
              Lifetime Qt Champion
              wrote on last edited by aha_1980
              #21

              @jefazo92 said in Can QChar functions work with QStrings ?:

              Thank you a lot for your reply. If it's not too much asking how did you find QRegularExpression ? Like I'm ctrl+F at the QStrings doc but I get 53 coincidences I don't know which of them all is the one that suits me for this example.

              I'd recomment another way: You know that you want to remove something from your string, so you search for remove first. That gives you some overloads:

              QString &	remove(int position, int n)
              QString &	remove(QChar ch, Qt::CaseSensitivity cs = Qt::CaseSensitive)
              QString &	remove(QLatin1String str, Qt::CaseSensitivity cs = Qt::CaseSensitive)
              QString &	remove(const QString &str, Qt::CaseSensitivity cs = Qt::CaseSensitive)
              QString &	remove(const QRegExp &rx)
              QString &	remove(const QRegularExpression &re)
              

              The first one simply removes n chars starting at position. The second one removes a specific char from the string. The third and fourth remove a substring. And the last two operate on regular expressions (with QRegExp beeing deprecated).

              If you now know that regular expressions are used to describe text patterns, you already have the correct remove overload. Then I googled for qregularexpression non-letter which brought me to https://stackoverflow.com/questions/38001256/handling-accented-letters-in-qregularexpressions-in-qt5

              The rest is experience.

              I'm trying to understand what the [^\p{L}] in the QRegularExpression("[^\p{L}]") means.

              This pattern describes everything that is not ([^]) an unicode letter (\\p{L}). You already got links to regex pages from my mates.

              Regards

              Qt has to stay free or it will die.

              JonBJ 1 Reply Last reply
              3
              • aha_1980A aha_1980

                @jefazo92 said in Can QChar functions work with QStrings ?:

                Thank you a lot for your reply. If it's not too much asking how did you find QRegularExpression ? Like I'm ctrl+F at the QStrings doc but I get 53 coincidences I don't know which of them all is the one that suits me for this example.

                I'd recomment another way: You know that you want to remove something from your string, so you search for remove first. That gives you some overloads:

                QString &	remove(int position, int n)
                QString &	remove(QChar ch, Qt::CaseSensitivity cs = Qt::CaseSensitive)
                QString &	remove(QLatin1String str, Qt::CaseSensitivity cs = Qt::CaseSensitive)
                QString &	remove(const QString &str, Qt::CaseSensitivity cs = Qt::CaseSensitive)
                QString &	remove(const QRegExp &rx)
                QString &	remove(const QRegularExpression &re)
                

                The first one simply removes n chars starting at position. The second one removes a specific char from the string. The third and fourth remove a substring. And the last two operate on regular expressions (with QRegExp beeing deprecated).

                If you now know that regular expressions are used to describe text patterns, you already have the correct remove overload. Then I googled for qregularexpression non-letter which brought me to https://stackoverflow.com/questions/38001256/handling-accented-letters-in-qregularexpressions-in-qt5

                The rest is experience.

                I'm trying to understand what the [^\p{L}] in the QRegularExpression("[^\p{L}]") means.

                This pattern describes everything that is not ([^]) an unicode letter (\\p{L}). You already got links to regex pages from my mates.

                Regards

                JonBJ Online
                JonBJ Online
                JonB
                wrote on last edited by JonB
                #22

                @aha_1980
                It's coming across the \p{L} construct for Unicode letter that's hard/intimidating. One does not come across it in many examples, and it's a later addition to reg exes.

                1 Reply Last reply
                1
                • fcarneyF Offline
                  fcarneyF Offline
                  fcarney
                  wrote on last edited by
                  #23

                  It bothers me that this ([^\p{L}]) regular expression would work in one engine and fail in another, at least according to the website that was linked:
                  https://regex101.com/
                  I tried it in the PHP one and it worked, but the Python and Ecmascript ones failed.

                  Somehow I had it in my head that regexs were standardized for the most part. That apparently is a bad assumption.

                  C++ is a perfectly valid school of magic.

                  aha_1980A JonBJ 2 Replies Last reply
                  1
                  • fcarneyF fcarney

                    It bothers me that this ([^\p{L}]) regular expression would work in one engine and fail in another, at least according to the website that was linked:
                    https://regex101.com/
                    I tried it in the PHP one and it worked, but the Python and Ecmascript ones failed.

                    Somehow I had it in my head that regexs were standardized for the most part. That apparently is a bad assumption.

                    aha_1980A Offline
                    aha_1980A Offline
                    aha_1980
                    Lifetime Qt Champion
                    wrote on last edited by
                    #24

                    @fcarney You need a regex engine that supports Unicode (it's a shame that 2019 not all engines do that!), according to: https://www.regular-expressions.info/unicode.html

                    Regards

                    Qt has to stay free or it will die.

                    1 Reply Last reply
                    2
                    • fcarneyF fcarney

                      It bothers me that this ([^\p{L}]) regular expression would work in one engine and fail in another, at least according to the website that was linked:
                      https://regex101.com/
                      I tried it in the PHP one and it worked, but the Python and Ecmascript ones failed.

                      Somehow I had it in my head that regexs were standardized for the most part. That apparently is a bad assumption.

                      JonBJ Online
                      JonBJ Online
                      JonB
                      wrote on last edited by
                      #25

                      @fcarney
                      A fair amount (but not exclusively) of my reg ex would have been in Perl. And that was before Perl had Unicode support, so at least in my old days Perl would indeed not have supported \p{L}. It's good that regex101 seems to have mentioned this. Of course the OP only cares about Qt now. But it's like I said: that construct is a bit of a "big one" for a beginner question!

                      1 Reply Last reply
                      0

                      • Login

                      • Login or register to search.
                      • First post
                        Last post
                      0
                      • Categories
                      • Recent
                      • Tags
                      • Popular
                      • Users
                      • Groups
                      • Search
                      • Get Qt Extensions
                      • Unsolved