【问题标题】:Finding Substrings in Non-English Strings [Urdu Strings]在非英语字符串中查找子字符串 [乌尔都语字符串]
【发布时间】:2021-07-31 06:17:17
【问题描述】:

我希望在乌尔都语的字符串中找到子字符串。例如,假设我有以下乌尔都语的字符串和子字符串:

fullstring = "آزاد دائرۃ المعارف، ویکیپیڈیا"

substring1 = "افریقی نژاد امریکی شہری حقوق کی تحریک (1955–1968) - آزاد دائرۃ ..."
substring2 = "Urdu English Translator حاصل کریں - Microsoft Store ur-PK"
substring3 = "ببر شیر - آزاد دائرۃ المعارف، ویکیپیڈیا"
substring4 = "اقوام متحدہ - ویکیپیڈیا"
substring5 = "واقعہ کربلا - آزاد دائرۃ المعارف"
substring6 = "Inaugural Address - Urdu | JFK Library"
substring7 = "دنیا میں امریکہ کے مقام کے بارے میں صدر بائیڈن کا خطاب - United ..."
substring8 = "ایران امریکہ کشیدگی: امریکی صدور اور جنگوں کی مبہم قانونی ..."

目标是搜索/找到每个子字符串完整字符串中出现的单词,然后选择相应的子字符串进行进一步处理。特别是,任何子字符串中出现的最少单词应该是 "آزاد دائرۃ"

在上面给出的示例中,应该选择并返回 substring1substring3substring4substring5 (True),而其余子串不应该被选中(False)

我编写了以下代码来完成上述任务:

fullstring = "آزاد دائرۃ المعارف، ویکیپیڈیا"
substring = "افریقی نژاد امریکی شہری حقوق کی تحریک (1955–1968) - آزاد دائرۃ ..."

# extract the part after the "-" part
s = substring.split("-")[1]
# remove any spaces if they are present
s = s.strip()

if s in fullstring:
   print("Found!")
else:
   print("Not found!")

代码给了我所有子字符串的 Not found! 响应。而对于 substring1substring3substring4substring5,它应该返回 Found!,和 Not found! 对于上面给出的所有其他子字符串。

请帮助我完成上述子字符串搜索任务。

【问题讨论】:

  • edit您的问题并为每个子字符串添加预期的输出,例如“for substring1 - Found for substring2 - ......”我几乎找到了解决方案,但不知道是不是你的预期输出!
  • 根据您的评论编辑。
  • 彻底解决了问题。告诉我它是否适合你。 :)
  • 优秀。你能解释一下异常处理程序(try-except)部分的代码吗?此外,将不胜感激对该问题投赞成票。 :-)

标签: python string search urdu


【解决方案1】:

你应该试试这个:

fullstring = "آزاد دائرۃ المعارف، ویکیپیڈیا"
substring = "افریقی نژاد امریکی شہری حقوق کی تحریک (1955–1968) - آزاد دائرۃ ..."

# extract the part after the "-" part
s = substring.split("-")[1]
# remove any spaces if they are present
s = s.strip().replace(".","")

if s in fullstring:
   print("Found!")
else:
   print("Not found!")

执行striped s 就像آزاد دائرۃ ... 但你在fullstring 中没有... 所以你得到Not found

您也可以像这样使用.find() 函数:

fullstring = "آزاد دائرۃ المعارف، ویکیپیڈیا"
substring = "افریقی نژاد امریکی شہری حقوق کی تحریک (1955–1968) - آزاد دائرۃ ..."

# extract the part after the "-" part
s = substring.split("-")[1]
# remove any spaces if they are present
s = s.strip()

if fullstring.find(s)!=-1:
   print("Found!")
else:
   print("Not found!")

对于所有子字符串,你可以试试这个:

fullstring = "آزاد دائرۃ المعارف، ویکیپیڈیا"

substring1 = "افریقی نژاد امریکی شہری حقوق کی تحریک (1955–1968) - آزاد دائرۃ ..."
substring2 = "Urdu English Translator حاصل کریں - Microsoft Store ur-PK"
substring3 = "ببر شیر - آزاد دائرۃ المعارف، ویکیپیڈیا"
substring4 = "اقوام متحدہ - ویکیپیڈیا"
substring5 = "واقعہ کربلا - آزاد دائرۃ المعارف"
substring6 = "Inaugural Address - Urdu | JFK Library"
substring7 = "دنیا میں امریکہ کے مقام کے بارے میں صدر بائیڈن کا خطاب - United ..."
substring8 = "ایران امریکہ کشیدگی: امریکی صدور اور جنگوں کی مبہم قانونی ..."
allsub=[substring1,substring2,substring3,substring4,substring5,substring6,substring7,substring8]

for a in allsub:
    try:
        s=a.split("-")[1].strip(". ").strip()
    except IndexError:
        s=a.split("-")[0].strip(". ").strip()
    if fullstring.find(s)!=-1:
        print("Found!")
    else:
        print("Not found!")

输出:

Found!
Not found!
Found!
Found!
Found!
Not found!
Not found!
Not found!

我已将所有子字符串的列表创建为 allsub 并检查您在做什么。此外,我已经完成了try-except,因为在某些子字符串中没有-,我们选择了列表的第二个元素。所以,有时它会通过错误。但是如果我们使用try-expect,那么它将执行except部分而不是抛出错误。

【讨论】:

  • 不幸的是,同样的答案“未找到!”。
  • 我已经尝试过您建议的代码。顺便说一句,我在您的建议中找不到 .find() 函数?
  • @user.1234 对不起!我的错,我编辑检查它。
  • AttributeError: 'list' 对象没有属性 'find'
  • fullstring.find(s) 这是你试过的吗?我觉得你很困惑。我在上次编辑中添加了完整的代码检查它。如果您遇到该错误,那么您必须通过拆分或其他方式将fullstring 更改为列表...@user.1234 如果您遇到错误,则只需复制/粘贴我的代码并进行测试。
【解决方案2】:

试试看:

fullstring = "آزاد دائرۃ المعارف، ویکیپیڈیا"

substring1 = "افریقی نژاد امریکی شہری حقوق کی تحریک (1955–1968) - آزاد دائرۃ ..."
substring2 = "Urdu English Translator حاصل کریں - Microsoft Store ur-PK"
substring3 = "ببر شیر - آزاد دائرۃ المعارف، ویکیپیڈیا"
substring4 = "اقوام متحدہ - ویکیپیڈیا"
substring5 = "واقعہ کربلا - آزاد دائرۃ المعارف"
substring6 = "Inaugural Address - Urdu | JFK Library"
substring7 = "دنیا میں امریکہ کے مقام کے بارے میں صدر بائیڈن کا خطاب - United ..."
substring8 = "ایران امریکہ کشیدگی: امریکی صدور اور جنگوں کی مبہم قانونی ..."
allstrings = (substring1, substring2, substring3, substring4, substring5, substring6, substring7, substring8)
for a in allstrings:
    try:
        s = a.split("-")[1]
    except:
        s = a
    s = s.strip().replace(".", "")
    if s in fullstring:
       print("Found!")
    else:
       print("Not found!")

输出:

Found!
Not found!
Found!
Found!
Found!
Not found!
Not found!
Not found!

【讨论】:

  • 优秀。感谢你的回复。对该问题投赞成票将不胜感激。
猜你喜欢
  • 1970-01-01
  • 2012-10-18
  • 2010-12-24
  • 1970-01-01
  • 1970-01-01
  • 2012-12-29
  • 1970-01-01
  • 2012-01-02
  • 2015-02-08
相关资源
最近更新 更多