regex 如何使用PCRE替换由空格分隔的两个单词?

wvyml7n5  于 2023-06-25  发布在  其他
关注(0)|答案(1)|浏览(124)

我一直在尝试使用Gambas编写一个简单的翻译器,但我一直在使用PCRE替换两个由空格分隔的单词,PCRE是Gambas上的内置组件。
语言是土耳其语和乌兹别克语。我想替换的确切短语是“görmek istiyorum”,字面意思是“我想看”。

If ComboBox1.Text = "Turkish" And ComboBox2.Text = "Azerbaijani" Then 
    TextArea2.Text = TextArea1.Text
    TextArea2.Text = RegExp.Replace(TextArea2.Text, "\\bbana\\b", "mənə")
    TextArea2.Text = RegExp.Replace(TextArea2.Text, "\\bben\\b", "mən")
    TextArea2.Text = RegExp.Replace(TextArea2.Text, "\\bbenden\\b", "məndən")
    TextArea2.Text = RegExp.Replace(TextArea2.Text, "\\bbeni\\b", "məni")
    TextArea2.Text = RegExp.Replace(TextArea2.Text, "\\bbenim\\b", "mənim")
    TextArea2.Text = RegExp.Replace(TextArea2.Text, "\\bistiyor\\b", "istəyir")
    TextArea2.Text = RegExp.Replace(TextArea2.Text, "\\bo\\b", "o")
    TextArea2.Text = RegExp.Replace(TextArea2.Text, "\\bseviyor\\b", "sevir")
    TextArea2.Text = RegExp.Replace(TextArea2.Text, "\\bsevmek\\b", "sevmək")
   Else If ComboBox1.Text = "Turkish" And ComboBox2.Text = "Uzbek" Then
    TextArea2.Text = TextArea1.Text
    TextArea2.Text = RegExp.Replace(TextArea2.Text, "\\bben\\b", "men")
    TextArea2.Text = RegExp.Replace(TextArea2.Text, "\\bbenim\\b", "mening")
    TextArea2.Text = RegExp.Replace(TextArea2.Text, "\\bgörmek\\b", "ko‘rmoq")
    TextArea2.Text = RegExp.Replace(TextArea2.Text, "\\bgörmek\\b\\h\\bistiyorum\\b", "ko‘rmoqchiman")
  Endif

我期望它将短语从“görmek istiyorum”替换为“ko'rmoqchiman”,但输出是“ko'rmoq istiyorum”,这是混合的。

gg58donl

gg58donl1#

好了,问题出在下面两行:

TextArea2.Text = RegExp.Replace(TextArea2.Text, "\\bgörmek\\b", "ko‘rmoq")
TextArea2.Text = RegExp.Replace(TextArea2.Text, "\\bgörmek\\b\\h\\bistiyorum\\b", "ko‘rmoqchiman")

第一行将“görmek”替换为“ko'rmoq”,因此短语“görmek istiyorum”变为“ko'rmoq istiyorum”。现在,当第二行检查此文本中的正则表达式“görmek istiyorum”时,它返回false。
要纠正它,您应该首先检查最大的正则表达式匹配。所以只要切换线路就可以了:

TextArea2.Text = RegExp.Replace(TextArea2.Text, "\\bgörmek\\b\\h\\bistiyorum\\b", "ko‘rmoqchiman")
TextArea2.Text = RegExp.Replace(TextArea2.Text, "\\bgörmek\\b", "ko‘rmoq")

相关问题